Rollup merge of #57699 - euclio:applicability-ify, r=petrochenkov
add applicability to remaining suggestions
Fixes #50723.
I noticed that the suggestion methods on `DiagnosticBuilder` weren't actually deprecated due to #57679. This PR deprecates them properly and fixes the remaining usages.
There's also a PR for clippy at rust-lang/rust-clippy#3667.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 65cdfe6..9924055 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -19,9 +19,16 @@
As a reminder, all contributors are expected to follow our [Code of Conduct][coc].
+The [rustc-guide] is your friend! It describes how the compiler works and how
+to contribute to it in more detail than this document.
+
+If this is your first time contributing, the [walkthrough] chapter of the guide
+can give you a good example of how a typical contribution would go.
+
[pound-rust-internals]: https://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust-internals
[internals]: https://internals.rust-lang.org
[coc]: https://www.rust-lang.org/conduct.html
+[walkthrough]: https://rust-lang.github.io/rustc-guide/walkthrough.html
## Feature Requests
[feature-requests]: #feature-requests
@@ -89,222 +96,14 @@
```
## The Build System
-[the-build-system]: #the-build-system
-Rust's build system allows you to bootstrap the compiler, run tests &
-benchmarks, generate documentation, install a fresh build of Rust, and more.
-It's your best friend when working on Rust, allowing you to compile & test
-your contributions before submission.
+For info on how to configure and build the compiler, please see [this
+chapter][rustcguidebuild] of the rustc-guide. This chapter contains info for
+contributions to the compiler and the standard library. It also lists some
+really useful commands to the build system (`./x.py`), which could save you a
+lot of time.
-The build system lives in [the `src/bootstrap` directory][bootstrap] in the
-project root. Our build system is itself written in Rust and is based on Cargo
-to actually build all the compiler's crates. If you have questions on the build
-system internals, try asking in [`#rust-internals`][pound-rust-internals].
-
-[bootstrap]: https://github.com/rust-lang/rust/tree/master/src/bootstrap/
-
-### Configuration
-[configuration]: #configuration
-
-Before you can start building the compiler you need to configure the build for
-your system. In most cases, that will just mean using the defaults provided
-for Rust.
-
-To change configuration, you must copy the file `config.toml.example`
-to `config.toml` in the directory from which you will be running the build, and
-change the settings provided.
-
-There are large number of options provided in this config file that will alter the
-configuration used in the build process. Some options to note:
-
-#### `[llvm]`:
-- `assertions = true` = This enables LLVM assertions, which makes LLVM misuse cause an assertion failure instead of weird misbehavior. This also slows down the compiler's runtime by ~20%.
-- `ccache = true` - Use ccache when building llvm
-
-#### `[build]`:
-- `compiler-docs = true` - Build compiler documentation
-
-#### `[rust]`:
-- `debuginfo = true` - Build a compiler with debuginfo. Makes building rustc slower, but then you can use a debugger to debug `rustc`.
-- `debuginfo-lines = true` - An alternative to `debuginfo = true` that doesn't let you use a debugger, but doesn't make building rustc slower and still gives you line numbers in backtraces.
-- `debuginfo-tools = true` - Build the extended tools with debuginfo.
-- `debug-assertions = true` - Makes the log output of `debug!` work.
-- `optimize = false` - Disable optimizations to speed up compilation of stage1 rust, but makes the stage1 compiler x100 slower.
-
-For more options, the `config.toml` file contains commented out defaults, with
-descriptions of what each option will do.
-
-Note: Previously the `./configure` script was used to configure this
-project. It can still be used, but it's recommended to use a `config.toml`
-file. If you still have a `config.mk` file in your directory - from
-`./configure` - you may need to delete it for `config.toml` to work.
-
-### Building
-[building]: #building
-
-A default configuration requires around 3.5 GB of disk space, whereas building a debug configuration may require more than 30 GB.
-
-Dependencies
-- [build dependencies](README.md#building-from-source)
-- `gdb` 6.2.0 minimum, 7.1 or later recommended for test builds
-
-The build system uses the `x.py` script to control the build process. This script
-is used to build, test, and document various parts of the compiler. You can
-execute it as:
-
-```sh
-python x.py build
-```
-
-On some systems you can also use the shorter version:
-
-```sh
-./x.py build
-```
-
-To learn more about the driver and top-level targets, you can execute:
-
-```sh
-python x.py --help
-```
-
-The general format for the driver script is:
-
-```sh
-python x.py <command> [<directory>]
-```
-
-Some example commands are `build`, `test`, and `doc`. These will build, test,
-and document the specified directory. The second argument, `<directory>`, is
-optional and defaults to working over the entire compiler. If specified,
-however, only that specific directory will be built. For example:
-
-```sh
-# build the entire compiler
-python x.py build
-
-# build all documentation
-python x.py doc
-
-# run all test suites
-python x.py test
-
-# build only the standard library
-python x.py build src/libstd
-
-# test only one particular test suite
-python x.py test src/test/rustdoc
-
-# build only the stage0 libcore library
-python x.py build src/libcore --stage 0
-```
-
-You can explore the build system through the various `--help` pages for each
-subcommand. For example to learn more about a command you can run:
-
-```
-python x.py build --help
-```
-
-To learn about all possible rules you can execute, run:
-
-```
-python x.py build --help --verbose
-```
-
-Note: Previously `./configure` and `make` were used to build this project.
-They are still available, but `x.py` is the recommended build system.
-
-### Useful commands
-[useful-commands]: #useful-commands
-
-Some common invocations of `x.py` are:
-
-- `x.py build --help` - show the help message and explain the subcommand
-- `x.py build src/libtest --stage 1` - build up to (and including) the first
- stage. For most cases we don't need to build the stage2 compiler, so we can
- save time by not building it. The stage1 compiler is a fully functioning
- compiler and (probably) will be enough to determine if your change works as
- expected.
-- `x.py build src/rustc --stage 1` - This will build just rustc, without libstd.
- This is the fastest way to recompile after you changed only rustc source code.
- Note however that the resulting rustc binary won't have a stdlib to link
- against by default. You can build libstd once with `x.py build src/libstd`,
- but it is only guaranteed to work if recompiled, so if there are any issues
- recompile it.
-- `x.py test` - build the full compiler & run all tests (takes a while). This
- is what gets run by the continuous integration system against your pull
- request. You should run this before submitting to make sure your tests pass
- & everything builds in the correct manner.
-- `x.py test src/libstd --stage 1` - test the standard library without
- recompiling stage 2.
-- `x.py test src/test/run-pass --test-args TESTNAME` - Run a matching set of
- tests.
- - `TESTNAME` should be a substring of the tests to match against e.g. it could
- be the fully qualified test name, or just a part of it.
- `TESTNAME=collections::hash::map::test_map::test_capacity_not_less_than_len`
- or `TESTNAME=test_capacity_not_less_than_len`.
-- `x.py test src/test/run-pass --stage 1 --test-args <substring-of-test-name>` -
- Run a single rpass test with the stage1 compiler (this will be quicker than
- running the command above as we only build the stage1 compiler, not the entire
- thing). You can also leave off the directory argument to run all stage1 test
- types.
-- `x.py test src/libcore --stage 1` - Run stage1 tests in `libcore`.
-- `x.py test src/tools/tidy` - Check that the source code is in compliance with
- Rust's style guidelines. There is no official document describing Rust's full
- guidelines as of yet, but basic rules like 4 spaces for indentation and no
- more than 99 characters in a single line should be kept in mind when writing
- code.
-
-### Using your local build
-[using-local-build]: #using-local-build
-
-If you use Rustup to manage your rust install, it has a feature called ["custom
-toolchains"][toolchain-link] that you can use to access your newly-built compiler
-without having to install it to your system or user PATH. If you've run `python
-x.py build`, then you can add your custom rustc to a new toolchain like this:
-
-[toolchain-link]: https://github.com/rust-lang-nursery/rustup.rs#working-with-custom-toolchains-and-local-builds
-
-```
-rustup toolchain link <name> build/<host-triple>/stage2
-```
-
-Where `<host-triple>` is the build triple for the host (the triple of your
-computer, by default), and `<name>` is the name for your custom toolchain. (If you
-added `--stage 1` to your build command, the compiler will be in the `stage1`
-folder instead.) You'll only need to do this once - it will automatically point
-to the latest build you've done.
-
-Once this is set up, you can use your custom toolchain just like any other. For
-example, if you've named your toolchain `local`, running `cargo +local build` will
-compile a project with your custom rustc, setting `rustup override set local` will
-override the toolchain for your current directory, and `cargo +local doc` will use
-your custom rustc and rustdoc to generate docs. (If you do this with a `--stage 1`
-build, you'll need to build rustdoc specially, since it's not normally built in
-stage 1. `python x.py build --stage 1 src/libstd src/tools/rustdoc` will build
-rustdoc and libstd, which will allow rustdoc to be run with that toolchain.)
-
-### Out-of-tree builds
-[out-of-tree-builds]: #out-of-tree-builds
-
-Rust's `x.py` script fully supports out-of-tree builds - it looks for
-the Rust source code from the directory `x.py` was found in, but it
-reads the `config.toml` configuration file from the directory it's
-run in, and places all build artifacts within a subdirectory named `build`.
-
-This means that if you want to do an out-of-tree build, you can just do it:
-```
-$ cd my/build/dir
-$ cp ~/my-config.toml config.toml # Or fill in config.toml otherwise
-$ path/to/rust/x.py build
-...
-$ # This will use the Rust source code in `path/to/rust`, but build
-$ # artifacts will now be in ./build
-```
-
-It's absolutely fine to have multiple build directories with different
-`config.toml` configurations using the same code.
+[rustcguidebuild]: https://rust-lang.github.io/rustc-guide/how-to-build-and-run.html
## Pull Requests
[pull-requests]: #pull-requests
@@ -320,26 +119,13 @@
Please make pull requests against the `master` branch.
-Compiling all of `./x.py test` can take a while. When testing your pull request,
-consider using one of the more specialized `./x.py` targets to cut down on the
-amount of time you have to wait. You need to have built the compiler at least
-once before running these will work, but that’s only one full build rather than
-one each time.
-
- $ python x.py test --stage 1
-
-is one such example, which builds just `rustc`, and then runs the tests. If
-you’re adding something to the standard library, try
-
- $ python x.py test src/libstd --stage 1
-
Please make sure your pull request is in compliance with Rust's style
guidelines by running
$ python x.py test src/tools/tidy
Make this check before every pull request (and every new commit in a pull
-request) ; you can add [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
+request); you can add [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
before every push to make sure you never forget to make this check.
All pull requests are reviewed by another person. We have a bot,
@@ -532,6 +318,12 @@
reference to `doc/reference.html`. The CSS might be messed up, but you can
verify that the HTML is right.
+Additionally, contributions to the [rustc-guide] are always welcome. Contributions
+can be made directly at [the
+rust-lang/rustc-guide](https://github.com/rust-lang/rustc-guide) repo. The issue
+tracker in that repo is also a great way to find things that need doing. There
+are issues for beginners and advanced compiler devs alike!
+
## Issue Triage
[issue-triage]: #issue-triage
@@ -627,7 +419,7 @@
more seasoned developers, some useful places to look for information
are:
-* The [rustc guide] contains information about how various parts of the compiler work
+* The [rustc guide] contains information about how various parts of the compiler work and how to contribute to the compiler
* [Rust Forge][rustforge] contains additional documentation, including write-ups of how to achieve common tasks
* The [Rust Internals forum][rif], a place to ask questions and
discuss Rust's internals
diff --git a/Cargo.lock b/Cargo.lock
index d3c6054..d4593c1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1332,7 +1332,7 @@
[[package]]
name = "minifier"
-version = "0.0.20"
+version = "0.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"macro-utils 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2565,10 +2565,6 @@
]
[[package]]
-name = "rustc_platform_intrinsics"
-version = "0.0.0"
-
-[[package]]
name = "rustc_plugin"
version = "0.0.0"
dependencies = [
@@ -2678,7 +2674,6 @@
"rustc 0.0.0",
"rustc_data_structures 0.0.0",
"rustc_errors 0.0.0",
- "rustc_platform_intrinsics 0.0.0",
"rustc_target 0.0.0",
"smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
"syntax 0.0.0",
@@ -2697,7 +2692,7 @@
name = "rustdoc"
version = "0.0.0"
dependencies = [
- "minifier 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)",
+ "minifier 0.0.26 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
"pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tempfile 3.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3515,7 +3510,7 @@
"checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16"
"checksum memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2ffa2c986de11a9df78620c01eeaaf27d94d3ff02bf81bfcca953102dd0c6ff"
"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
-"checksum minifier 0.0.20 (registry+https://github.com/rust-lang/crates.io-index)" = "96c269bb45c39b333392b2b18ad71760b34ac65666591386b0e959ed58b3f474"
+"checksum minifier 0.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "f299df45afd73332044ea9f717c816a84fc90c8b631409abf339ba93642a7985"
"checksum miniz-sys 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "0300eafb20369952951699b68243ab4334f4b10a88f411c221d444b36c40e649"
"checksum miniz_oxide 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ad30a47319c16cde58d0314f5d98202a80c9083b5f61178457403dfb14e509c"
"checksum miniz_oxide_c_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "28edaef377517fd9fe3e085c37d892ce7acd1fbeab9239c5a36eec352d8a8b7e"
diff --git a/README.md b/README.md
index cb1f062..514e420 100644
--- a/README.md
+++ b/README.md
@@ -13,9 +13,13 @@
["Installation"]: https://doc.rust-lang.org/book/ch01-01-installation.html
[The Book]: https://doc.rust-lang.org/book/index.html
-## Building from Source
+## Installing from Source
[building-from-source]: #building-from-source
+_Note: If you wish to contribute to the compiler, you should read
+[this chapter](https://rust-lang.github.io/rustc-guide/how-to-build-and-run.html)
+of the rustc-guide instead._
+
### Building on *nix
1. Make sure you have installed the dependencies:
diff --git a/src/doc/book b/src/doc/book
index 74d81d8..0e9061c 160000
--- a/src/doc/book
+++ b/src/doc/book
@@ -1 +1 @@
-Subproject commit 74d81d80052cb88925f0e73b12fbd0b73ab7b5a0
+Subproject commit 0e9061cbaf95adfb9f3ed36c6cef4c046f282e86
diff --git a/src/doc/reference b/src/doc/reference
index 60077ef..1c775a1 160000
--- a/src/doc/reference
+++ b/src/doc/reference
@@ -1 +1 @@
-Subproject commit 60077efda319c95a89fe39609803c5433567adbf
+Subproject commit 1c775a1dc5e29bc44b36604b510d6196d98077fa
diff --git a/src/doc/rustc/src/codegen-options/index.md b/src/doc/rustc/src/codegen-options/index.md
index 94f2104..a616409 100644
--- a/src/doc/rustc/src/codegen-options/index.md
+++ b/src/doc/rustc/src/codegen-options/index.md
@@ -187,7 +187,7 @@
This flag lets you control the optimization level.
-* `0`: no optimizations
+* `0`: no optimizations, also turn on `cfg(debug_assertions)`.
* `1`: basic optimizations
* `2`: some optimizations
* `3`: all optimizations
diff --git a/src/doc/rustc/src/contributing.md b/src/doc/rustc/src/contributing.md
index 3a1cafe..25a5c97 100644
--- a/src/doc/rustc/src/contributing.md
+++ b/src/doc/rustc/src/contributing.md
@@ -1,6 +1,12 @@
# Contributing to rustc
We'd love to have your help improving `rustc`! To that end, we've written [a
-whole book](https://rust-lang.github.io/rustc-guide/) on its
+whole book][rustc_guide] on its
internals, how it works, and how to get started working on it. To learn
more, you'll want to check that out.
+
+If you would like to contribute to _this_ book, you can find its source in the
+rustc source at [src/doc/rustc][rustc_book].
+
+[rustc_guide]: https://rust-lang.github.io/rustc-guide/
+[rustc_book]: https://github.com/rust-lang/rust/tree/master/src/doc/rustc
diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md
index 905b064..d3eb8cb 100644
--- a/src/doc/rustdoc/src/unstable-features.md
+++ b/src/doc/rustdoc/src/unstable-features.md
@@ -417,3 +417,15 @@
(grouping of crate docs generated into the same output directory, like with `cargo doc`). Per-crate
files like the search index will still load from the documentation root, but anything that gets
renamed with `--resource-suffix` will load from the given path.
+
+### `--persist-doctests`: persist doctest executables after running
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --test -Z unstable-options --persist-doctests target/rustdoctest
+```
+
+This flag allows you to keep doctest executables around after they're compiled or run.
+Usually, rustdoc will immediately discard a compiled doctest after it's been tested, but
+with this option, you can keep those binaries around for farther testing.
\ No newline at end of file
diff --git a/src/etc/platform-intrinsics/aarch64.json b/src/etc/platform-intrinsics/aarch64.json
deleted file mode 100644
index c8cda40..0000000
--- a/src/etc/platform-intrinsics/aarch64.json
+++ /dev/null
@@ -1,592 +0,0 @@
-{
- "platform": "aarch64_v",
- "intrinsic_prefix": "",
- "llvm_prefix": "llvm.aarch64.neon.",
- "number_info": {
- "signed": {
- "kind": "s",
- "data_type": { "pattern": "s{bitwidth}" }
- },
- "unsigned": {
- "kind": "u",
- "data_type": { "pattern": "u{bitwidth}" }
- },
- "float": {
- "kind": "f",
- "data_type": { "pattern": "f{bitwidth}" }
- }
- },
- "width_info": {
- "64": { "width": "" },
- "128": { "width": "q" }
- },
- "intrinsics": [
- {
- "intrinsic": "hadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}hadd.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rhadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}rhadd.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}qadd.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "uqadd_{0.data_type}",
- "width": [128],
- "llvm": "suqadd.{0.llvm_name}",
- "ret": "s(8-64)",
- "args": ["0", "0u"]
- },
- {
- "intrinsic": "sqadd_{0.data_type}",
- "width": [128],
- "llvm": "usqadd.{0.llvm_name}",
- "ret": "u(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "raddhn_{1.data_type}",
- "width": [64],
- "llvm": "raddhn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "0w"]
- },
- {
- "intrinsic": "fmulx{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "fmulx.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "fma{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.fma.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qdmulh{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqdmulh.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qrdmulh{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqrdmulh.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "mull_{1.data_type}",
- "width": [128],
- "llvm": "{0.kind}mull.{0.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "qdmull{0.width}_{1.data_type}",
- "width": [128],
- "llvm": "sqdmull.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "hsub{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}hsub.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qsub{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}qsub.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rsubhn_{1.data_type}",
- "width": [64],
- "llvm": "rsubhn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "0w"]
- },
- {
- "intrinsic": "abd{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}abd.{0.llvm_name}",
- "ret": ["i(8-32)","f(32-64)"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "max{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}max.{0.llvm_name}",
- "ret": ["i(8-32)","f(32-64)"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "min{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}min.{0.llvm_name}",
- "ret": ["i(8-32)","f(32-64)"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "maxnm{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxnm.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "minnm{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minnm.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "shl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}shl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}qshl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "rshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}rshl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qrshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}qrshl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qshrun_n_{1.data_type}",
- "width": [64],
- "llvm": "sqshrun.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qrshrun_n_{1.data_type}",
- "width": [64],
- "llvm": "sqrshrun.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "{0.kind}qshrn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "rshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "rshrn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qrshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "{0.kind}qrshrn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "sri{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "vsri.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sli{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "vsli.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "vqmovn_{1.data_type}",
- "width": [64],
- "llvm": "{0.kind}qxtn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w"]
- },
- {
- "intrinsic": "abs{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "abs.{0.llvm_name}",
- "ret": "s(8-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "abs{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.fabs.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "qabs{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "sqabs.{0.llvm_name}",
- "ret": "s(8-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "qneg{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqneg.{0.llvm_name}",
- "ret": "s(8-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "clz{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.ctlz.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "cls{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "cls.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "cnt{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.ctpop.{0.llvm_name}",
- "ret": "i8",
- "args": ["0"]
- },
- {
- "intrinsic": "recpe{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}recpe.{0.llvm_name}",
- "ret": ["u32","f(32-64)"],
- "args": ["0"]
- },
- {
- "intrinsic": "recps{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "frecps.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sqrt{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.sqrt.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrte{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}rsqrte.{0.llvm_name}",
- "ret": ["u32","f(32-64)"],
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrts{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "frsqrts.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rbit{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "rbit.{0.llvm_name}",
- "ret": "i8",
- "args": ["0"]
- },
- {
- "intrinsic": "ld2{0[0].width}_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld2.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);2]","[f(32-64);2]"],
- "args": ["0.0SPc/0.0"]
- },
- {
- "intrinsic": "ld3{0[0].width}_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld3.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);3]","[f(32-64);3]"],
- "args": ["0.0SPc/0.0"]
- },
- {
- "intrinsic": "ld4{0[0].width}_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld4.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);4]","[f(32-64);4]"],
- "args": ["0.0SPc/0.0"]
- },
- {
- "intrinsic": "ld2{0[0].width}_dup_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld2.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);2]","[f(32-64);2]"],
- "args": ["0.0SPc"]
- },
- {
- "intrinsic": "ld3{0[0].width}_dup_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld3.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);3]","[f(32-64);3]"],
- "args": ["0.0SPc"]
- },
- {
- "intrinsic": "ld4{0[0].width}_dup_{0[0].data_type}",
- "width": [64, 128],
- "llvm": "ld4.{0[0].llvm_name}.{1.llvm_name}",
- "ret": ["[i(8-64);4]","[f(32-64);4]"],
- "args": ["0.0SPc"]
- },
- {
- "intrinsic": "padd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "addp.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "padd{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "addp.{0.llvm_name}",
- "ret": ["i64","f64"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "paddl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}addlp.{0.llvm_name}.{1.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0dn"]
- },
- {
- "intrinsic": "pmax{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxp.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmax{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}maxp.{0.llvm_name}",
- "ret": ["i64","f64"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmin{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minp.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmin{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}minp.{0.llvm_name}",
- "ret": ["i64","f64"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmaxnm{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxnmp.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmaxnm{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}maxnmp.{0.llvm_name}",
- "ret": ["i64","f64"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pminnm{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minnmp.{0.llvm_name}",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pminnm{0.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}minnmp.{0.llvm_name}",
- "ret": "f64",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "addv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}addv.{0.llvm_name}.{1.llvm_name}",
- "ret": ["I(8-32)","F32"],
- "args": ["0v"]
- },
- {
- "intrinsic": "addv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}addv.{0.llvm_name}.{1.llvm_name}",
- "ret": ["I64","F64"],
- "args": ["0v"]
- },
- {
- "intrinsic": "addlv{1.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}addlv.{0.llvm_name}.{1.llvm_name}",
- "ret": "I(16-64)",
- "args": ["0vdn"]
- },
- {
- "intrinsic": "maxv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxv.{0.llvm_name}.{1.llvm_name}",
- "ret": ["I(8-32)","F32"],
- "args": ["0v"]
- },
- {
- "intrinsic": "maxv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}maxv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F64",
- "args": ["0v"]
- },
- {
- "intrinsic": "minv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minv.{0.llvm_name}.{1.llvm_name}",
- "ret": ["I(8-32)","F32"],
- "args": ["0v"]
- },
- {
- "intrinsic": "minv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}minv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F64",
- "args": ["0v"]
- },
- {
- "intrinsic": "maxnmv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}maxnmv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F32",
- "args": ["0v"]
- },
- {
- "intrinsic": "maxnmv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}maxnmv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F64",
- "args": ["0v"]
- },
- {
- "intrinsic": "minnmv{1.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "{0.kind}minnmv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F32",
- "args": ["0v"]
- },
- {
- "intrinsic": "minnmv{1.width}_{0.data_type}",
- "width": [128],
- "llvm": "{0.kind}minnmv.{0.llvm_name}.{1.llvm_name}",
- "ret": "F64",
- "args": ["0v"]
- },
- {
- "intrinsic": "qtbl1{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbl1.{0.llvm_name}",
- "ret": "i8",
- "args": ["0x128", "0u"]
- },
- {
- "intrinsic": "qtbx1{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbx1.{0.llvm_name}",
- "ret": "i8",
- "args": ["0", "0x128", "0u"]
- },
- {
- "intrinsic": "qtbl2{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbl2.{0.llvm_name}",
- "ret": "i8",
- "args": ["(0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbx2{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbx2.{0.llvm_name}",
- "ret": "i8",
- "args": ["(0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbl3{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbl3.{0.llvm_name}",
- "ret": "i8",
- "args": ["(0x128,0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbx3{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbx3.{0.llvm_name}",
- "ret": "i8",
- "args": ["0", "(0x128,0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbl4{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbl4.{0.llvm_name}",
- "ret": "i8",
- "args": ["(0x128,0x128,0x128,0x128)f", "0u"]
- },
- {
- "intrinsic": "qtbx4{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "tbx4.{0.llvm_name}",
- "ret": "i8",
- "args": ["0", "(0x128,0x128,0x128,0x128)f", "0u"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/arm.json b/src/etc/platform-intrinsics/arm.json
deleted file mode 100644
index d008320..0000000
--- a/src/etc/platform-intrinsics/arm.json
+++ /dev/null
@@ -1,396 +0,0 @@
-{
- "platform": "arm_v",
- "intrinsic_prefix": "",
- "llvm_prefix": "llvm.arm.neon.v",
- "number_info": {
- "signed": {
- "kind": "s",
- "data_type": { "pattern": "s{bitwidth}" }
- },
- "unsigned": {
- "kind": "u",
- "data_type": { "pattern": "u{bitwidth}" }
- },
- "float": {
- "kind": "f",
- "data_type": { "pattern": "f{bitwidth}" }
- }
- },
- "width_info": {
- "64": { "width": "" },
- "128": { "width": "q" }
- },
- "intrinsics": [
- {
- "intrinsic": "hadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "hadd{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rhadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "rhadd{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qadd{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "qadd{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "raddhn_{1.data_type}",
- "width": [64],
- "llvm": "raddhn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "0w"]
- },
- {
- "intrinsic": "fma{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.fma.{0.llvm_name}",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qdmulh{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqdmulh.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qrdmulh{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqrdmulh.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "mull_{1.data_type}",
- "width": [128],
- "llvm": "mull{0.kind}.{0.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "qdmull{0.width}_{1.data_type}",
- "width": [128],
- "llvm": "sqdmull.{0.llvm_name}",
- "ret": "s(16-32)",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "hsub{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "hsub{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "qsub{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "qsub{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "rsubhn_{1.data_type}",
- "width": [64],
- "llvm": "rsubhn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "0w"]
- },
- {
- "intrinsic": "abd{0.width}_{1.data_type}",
- "width": [64, 128],
- "llvm": "abd{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "max{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "max{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "min{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "min{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "shl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "shl{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "qshl{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "rshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "rshl{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qrshl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "qrshl{0.kind}.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "qshrun_n_{1.data_type}",
- "width": [64],
- "llvm": "sqshrun.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qrshrun_n_{1.data_type}",
- "width": [64],
- "llvm": "sqrshrun.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "qshrn{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "rshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "rshrn.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "qrshrn_n_{1.data_type}",
- "width": [64],
- "llvm": "qrshrn{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w", "U32"]
- },
- {
- "intrinsic": "sri{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "vsri.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sli{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "vsli.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "vqmovn_{1.data_type}",
- "width": [64],
- "llvm": "qxtn{0.kind}.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0w"]
- },
- {
- "intrinsic": "abs{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "abs.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "abs{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.fabs.{0.llvm_name}",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "qabs{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "sqabs.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "qneg{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "sqneg.{0.llvm_name}",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "clz{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.ctlz.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "cls{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "cls.{0.llvm_name}",
- "ret": "i(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "cnt{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.ctpop.{0.llvm_name}",
- "ret": "i8",
- "args": ["0"]
- },
- {
- "intrinsic": "recpe{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "recpe.{0.llvm_name}",
- "ret": ["u32","f32"],
- "args": ["0"]
- },
- {
- "intrinsic": "recps{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "frecps.{0.llvm_name}",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sqrt{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "!llvm.sqrt.{0.llvm_name}",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrte{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "rsqrte.{0.llvm_name}",
- "ret": ["u32","f32"],
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrts{0.width}_{0.data_type}",
- "width": [64,128],
- "llvm": "rsqrts.{0.llvm_name}",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "bsl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "bsl.{0.llvm_name}",
- "ret": "i(8-64)",
- "args": ["0u", "0"]
- },
- {
- "intrinsic": "padd{0.width}_{0.data_type}",
- "width": [64],
- "llvm": "padd.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "paddl{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "paddl{0.kind}.{0.llvm_name}.{1.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0dn"]
- },
- {
- "intrinsic": "padal{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "padal{0.kind}.{0.llvm_name}.{1.llvm_name}",
- "ret": "i(16-64)",
- "args": ["0", "0dn"]
- },
- {
- "intrinsic": "pmax{0.width}_{0.data_type}",
- "width": [64],
- "llvm": "pmax{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "pmin{0.width}_{0.data_type}",
- "width": [64, 128],
- "llvm": "pmin{0.kind}.{0.llvm_name}",
- "ret": ["i(8-32)","f32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "tbl1_{0.data_type}",
- "width": [64],
- "llvm": "tbl1",
- "ret": "i8",
- "args": ["0", "0u"]
- },
- {
- "intrinsic": "tbx1_{0.data_type}",
- "width": [64],
- "llvm": "tbx1",
- "ret": "i8",
- "args": ["0", "0", "0u"]
- },
- {
- "intrinsic": "tbl2_{0.data_type}",
- "width": [64],
- "llvm": "tbl2",
- "ret": "i8",
- "args": ["(0,0)f", "0u"]
- },
- {
- "intrinsic": "tbx2_{0.data_type}",
- "width": [64],
- "llvm": "tbx2",
- "ret": "i8",
- "args": ["(0,0)f", "0u"]
- },
- {
- "intrinsic": "tbl3_{0.data_type}",
- "width": [64],
- "llvm": "tbl3",
- "ret": "i8",
- "args": ["(0,0,0)f", "0u"]
- },
- {
- "intrinsic": "tbx3_{0.data_type}",
- "width": [64],
- "llvm": "tbx3",
- "ret": "i8",
- "args": ["0", "(0,0,0)f", "0u"]
- },
- {
- "intrinsic": "tbl4_{0.data_type}",
- "width": [64],
- "llvm": "tbl4",
- "ret": "i8",
- "args": ["(0,0,0,0)f", "0u"]
- },
- {
- "intrinsic": "tbx4_{0.data_type}",
- "width": [64],
- "llvm": "tbx4",
- "ret": "i8",
- "args": ["0", "(0,0,0,0)f", "0u"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/generator.py b/src/etc/platform-intrinsics/generator.py
deleted file mode 100644
index fa97131..0000000
--- a/src/etc/platform-intrinsics/generator.py
+++ /dev/null
@@ -1,854 +0,0 @@
-from __future__ import division, print_function
-import json
-import argparse
-import sys
-import re
-import textwrap
-import itertools
-
-SPEC = re.compile(
- r'^(?:(?P<void>V)|(?P<id>[iusfIUSF])(?:\((?P<start>\d+)-(?P<end>\d+)\)|'
- r'(?P<width>\d+)(:?/(?P<llvm_width>\d+))?)'
- r'|(?P<reference>\d+))(?P<index>\.\d+)?(?P<modifiers>[vShdnwusfDMCNW]*)(?P<force_width>x\d+)?'
- r'(?:(?P<pointer>Pm|Pc)(?P<llvm_pointer>/.*)?|(?P<bitcast>->.*))?$'
-)
-
-class PlatformInfo(object):
- def __init__(self, json):
- self._platform = json['platform']
-
- def platform_prefix(self):
- return self._platform
-
-class IntrinsicSet(object):
- def __init__(self, platform, json):
- self._llvm_prefix = json['llvm_prefix']
- self._type_info = json['number_info']
- self._intrinsics = json['intrinsics']
- self._widths = json['width_info']
- self._platform = platform
- self._intrinsic_prefix = json['intrinsic_prefix']
-
- def intrinsics(self):
- for raw in self._intrinsics:
- yield GenericIntrinsic(self,
- raw['intrinsic'], raw['width'], raw['llvm'],
- raw['ret'], raw['args'])
-
- def platform(self):
- return self._platform
-
- def intrinsic_prefix(self):
- return self._intrinsic_prefix
-
- def llvm_prefix(self):
- return self._llvm_prefix
-
- def width_info(self, bitwidth):
- return self._widths[str(bitwidth)]
-
- def number_type_info(self, value):
- data = self._type_info[value.__class__.__name__.lower()]
- bitwidth = value.bitwidth()
- def lookup(raw):
- if not isinstance(raw, dict):
- return raw
-
- try:
- return raw[str(bitwidth)]
- except KeyError:
- return raw['pattern'].format(bitwidth = bitwidth)
-
- return PlatformTypeInfo(value.llvm_name(),
- {k: lookup(v) for k, v in data.items()})
-
-class PlatformTypeInfo(object):
- def __init__(self, llvm_name, properties, elems = None):
- if elems is None:
- self.properties = properties
- self.llvm_name = llvm_name
- else:
- assert properties is None and llvm_name is None
- self.properties = {}
- self.elems = elems
-
- def __repr__(self):
- return '<PlatformTypeInfo {}, {}>'.format(self.llvm_name, self.properties)
-
- def __getattr__(self, name):
- return self.properties[name]
-
- def __getitem__(self, idx):
- return self.elems[idx]
-
- def vectorize(self, length, width_info):
- props = self.properties.copy()
- props.update(width_info)
- return PlatformTypeInfo('v{}{}'.format(length, self.llvm_name), props)
-
- def pointer(self, llvm_elem):
- name = self.llvm_name if llvm_elem is None else llvm_elem.llvm_name
- return PlatformTypeInfo('p0{}'.format(name), self.properties)
-
-BITWIDTH_POINTER = '<pointer>'
-
-class Type(object):
- def __init__(self, bitwidth):
- self._bitwidth = bitwidth
-
- def bitwidth(self):
- return self._bitwidth
-
- def modify(self, spec, width, previous):
- raise NotImplementedError()
-
- def __ne__(self, other):
- return not (self == other)
-
-class Void(Type):
- def __init__(self):
- Type.__init__(self, 0)
-
- @staticmethod
- def compiler_ctor():
- return '::VOID'
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- @staticmethod
- def rust_name():
- return '()'
-
- @staticmethod
- def type_info(platform_info):
- return None
-
- def __eq__(self, other):
- return isinstance(other, Void)
-
-class Number(Type):
- def __init__(self, bitwidth):
- Type.__init__(self, bitwidth)
-
- def modify(self, spec, width, previous):
- if spec == 'u':
- return Unsigned(self.bitwidth())
- elif spec == 's':
- return Signed(self.bitwidth())
- elif spec == 'f':
- return Float(self.bitwidth())
- elif spec == 'w':
- return self.__class__(self.bitwidth() * 2)
- elif spec == 'n':
- return self.__class__(self.bitwidth() // 2)
- elif spec == 'v':
- return Vector(self, width // self.bitwidth())
- else:
- raise ValueError('unknown modification spec {}', spec)
-
- def type_info(self, platform_info):
- return platform_info.number_type_info(self)
-
- def __eq__(self, other):
- # print(self, other)
- return self.__class__ == other.__class__ and self.bitwidth() == other.bitwidth()
-
-class Signed(Number):
- def __init__(self, bitwidth, llvm_bitwidth = None):
- Number.__init__(self, bitwidth)
- self._llvm_bitwidth = llvm_bitwidth
-
-
- def compiler_ctor(self):
- if self._llvm_bitwidth is None:
- return '::I{}'.format(self.bitwidth())
- else:
- return '::I{}_{}'.format(self.bitwidth(), self._llvm_bitwidth)
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- def llvm_name(self):
- bw = self._llvm_bitwidth or self.bitwidth()
- return 'i{}'.format(bw)
-
- def rust_name(self):
- return 'i{}'.format(self.bitwidth())
-
-class Unsigned(Number):
- def __init__(self, bitwidth, llvm_bitwidth = None):
- Number.__init__(self, bitwidth)
- self._llvm_bitwidth = llvm_bitwidth
-
- def compiler_ctor(self):
- if self._llvm_bitwidth is None:
- return '::U{}'.format(self.bitwidth())
- else:
- return '::U{}_{}'.format(self.bitwidth(), self._llvm_bitwidth)
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- def llvm_name(self):
- bw = self._llvm_bitwidth or self.bitwidth()
- return 'i{}'.format(bw)
-
- def rust_name(self):
- return 'u{}'.format(self.bitwidth())
-
-class Float(Number):
- def __init__(self, bitwidth):
- assert bitwidth in (32, 64)
- Number.__init__(self, bitwidth)
-
- def compiler_ctor(self):
- return '::F{}'.format(self.bitwidth())
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- def llvm_name(self):
- return 'f{}'.format(self.bitwidth())
-
- def rust_name(self):
- return 'f{}'.format(self.bitwidth())
-
-class Vector(Type):
- def __init__(self, elem, length, bitcast = None):
- assert isinstance(elem, Type) and not isinstance(elem, Vector)
- Type.__init__(self,
- elem.bitwidth() * length)
- self._length = length
- self._elem = elem
- assert bitcast is None or (isinstance(bitcast, Vector) and
- bitcast._bitcast is None and
- bitcast._elem.bitwidth() == elem.bitwidth())
- if bitcast is not None and bitcast._elem != elem:
- self._bitcast = bitcast._elem
- else:
- self._bitcast = None
-
- def modify(self, spec, width, previous):
- if spec == 'S':
- return self._elem
- elif spec == 'h':
- return Vector(self._elem, self._length // 2)
- elif spec == 'd':
- return Vector(self._elem, self._length * 2)
- elif spec == 'N':
- elem = self._elem.__class__(self._elem.bitwidth() // 2)
- return Vector(elem, self._length * 2)
- elif spec == 'W':
- elem = self._elem.__class__(self._elem.bitwidth() * 2)
- return Vector(elem, self._length // 2)
- elif spec.startswith('x'):
- new_bitwidth = int(spec[1:])
- return Vector(self._elem, new_bitwidth // self._elem.bitwidth())
- elif spec.startswith('->'):
- bitcast_to = TypeSpec(spec[2:])
- choices = list(bitcast_to.enumerate(width, previous))
- assert len(choices) == 1
- bitcast_to = choices[0]
- return Vector(self._elem, self._length, bitcast_to)
- else:
- return Vector(self._elem.modify(spec, width, previous), self._length)
-
- def compiler_ctor(self):
- if self._bitcast is None:
- return '{}x{}'.format(self._elem.compiler_ctor(),
- self._length)
- else:
- return '{}x{}_{}'.format(self._elem.compiler_ctor(),
- self._length,
- self._bitcast.compiler_ctor()
- .replace('::', ''))
-
- def compiler_ctor_ref(self):
- return '&' + self.compiler_ctor()
-
- def rust_name(self):
- return '{}x{}'.format(self._elem.rust_name(), self._length)
-
- def type_info(self, platform_info):
- elem_info = self._elem.type_info(platform_info)
- return elem_info.vectorize(self._length,
- platform_info.width_info(self.bitwidth()))
-
- def __eq__(self, other):
- return isinstance(other, Vector) and self._length == other._length and \
- self._elem == other._elem and self._bitcast == other._bitcast
-
-class Pointer(Type):
- def __init__(self, elem, llvm_elem, const):
- self._elem = elem
- self._llvm_elem = llvm_elem
- self._const = const
- Type.__init__(self, BITWIDTH_POINTER)
-
- def modify(self, spec, width, previous):
- if spec == 'D':
- return self._elem
- elif spec == 'M':
- return Pointer(self._elem, self._llvm_elem, False)
- elif spec == 'C':
- return Pointer(self._elem, self._llvm_elem, True)
- else:
- return Pointer(self._elem.modify(spec, width, previous), self._llvm_elem, self._const)
-
- def compiler_ctor(self):
- if self._llvm_elem is None:
- llvm_elem = 'None'
- else:
- llvm_elem = 'Some({})'.format(self._llvm_elem.compiler_ctor_ref())
- return 'Type::Pointer({}, {}, {})'.format(self._elem.compiler_ctor_ref(),
- llvm_elem,
- 'true' if self._const else 'false')
-
- def compiler_ctor_ref(self):
- return "{{ static PTR: Type = {}; &PTR }}".format(self.compiler_ctor())
-
-
- def rust_name(self):
- return '*{} {}'.format('const' if self._const else 'mut',
- self._elem.rust_name())
-
- def type_info(self, platform_info):
- if self._llvm_elem is None:
- llvm_elem = None
- else:
- llvm_elem = self._llvm_elem.type_info(platform_info)
- return self._elem.type_info(platform_info).pointer(llvm_elem)
-
- def __eq__(self, other):
- return isinstance(other, Pointer) and self._const == other._const \
- and self._elem == other._elem and self._llvm_elem == other._llvm_elem
-
-class Aggregate(Type):
- def __init__(self, flatten, elems):
- self._flatten = flatten
- self._elems = elems
- Type.__init__(self, sum(elem.bitwidth() for elem in elems))
-
- def __repr__(self):
- return '<Aggregate {}>'.format(self._elems)
-
- def modify(self, spec, width, previous):
- if spec.startswith('.'):
- num = int(spec[1:])
- return self._elems[num]
- else:
- print(spec)
- raise NotImplementedError()
-
- def compiler_ctor(self):
- parts = "{{ static PARTS: [&'static Type; {}] = [{}]; &PARTS }}"
- elems = ', '.join(elem.compiler_ctor_ref() for elem in self._elems)
- parts = parts.format(len(self._elems), elems)
- return 'Type::Aggregate({}, {})'.format('true' if self._flatten else 'false',
- parts)
-
- def compiler_ctor_ref(self):
- return "{{ static AGG: Type = {}; &AGG }}".format(self.compiler_ctor())
-
- def rust_name(self):
- return '({})'.format(', '.join(elem.rust_name() for elem in self._elems))
-
- def type_info(self, platform_info):
- return PlatformTypeInfo(None, None, [elem.type_info(platform_info) for elem in self._elems])
-
- def __eq__(self, other):
- return isinstance(other, Aggregate) and self._flatten == other._flatten and \
- self._elems == other._elems
-
-
-TYPE_ID_LOOKUP = {'i': [Signed, Unsigned],
- 's': [Signed],
- 'u': [Unsigned],
- 'f': [Float]}
-
-def ptrify(match, elem, width, previous):
- ptr = match.group('pointer')
- if ptr is None:
- return elem
- else:
- llvm_ptr = match.group('llvm_pointer')
- if llvm_ptr is None:
- llvm_elem = None
- else:
- assert llvm_ptr.startswith('/')
- options = list(TypeSpec(llvm_ptr[1:]).enumerate(width, previous))
- assert len(options) == 1
- llvm_elem = options[0]
- assert ptr in ('Pc', 'Pm')
- return Pointer(elem, llvm_elem, ptr == 'Pc')
-
-class TypeSpec(object):
- def __init__(self, spec):
- if not isinstance(spec, list):
- spec = [spec]
-
- self.spec = spec
-
- def enumerate(self, width, previous):
- for spec in self.spec:
- match = SPEC.match(spec)
- if match is not None:
- id = match.group('id')
- reference = match.group('reference')
-
- modifiers = []
- index = match.group('index')
- if index is not None:
- modifiers.append(index)
- modifiers += list(match.group('modifiers') or '')
- force = match.group('force_width')
- if force is not None:
- modifiers.append(force)
- bitcast = match.group('bitcast')
- if bitcast is not None:
- modifiers.append(bitcast)
-
- if match.group('void') is not None:
- assert spec == 'V'
- yield Void()
- elif id is not None:
- is_vector = id.islower()
- type_ctors = TYPE_ID_LOOKUP[id.lower()]
-
- start = match.group('start')
- if start is not None:
- end = match.group('end')
- llvm_width = None
- else:
- start = end = match.group('width')
- llvm_width = match.group('llvm_width')
- start = int(start)
- end = int(end)
-
- bitwidth = start
- while bitwidth <= end:
- for ctor in type_ctors:
- if llvm_width is not None:
- assert not is_vector
- llvm_width = int(llvm_width)
- assert llvm_width < bitwidth
- scalar = ctor(bitwidth, llvm_width)
- else:
- scalar = ctor(bitwidth)
-
- if is_vector:
- elem = Vector(scalar, width // bitwidth)
- else:
- assert bitcast is None
- elem = scalar
-
- for x in modifiers:
- elem = elem.modify(x, width, previous)
- yield ptrify(match, elem, width, previous)
- bitwidth *= 2
- elif reference is not None:
- reference = int(reference)
- assert reference < len(previous), \
- 'referring to argument {}, but only {} are known'.format(reference,
- len(previous))
- ret = previous[reference]
- for x in modifiers:
- ret = ret.modify(x, width, previous)
- yield ptrify(match, ret, width, previous)
- else:
- assert False, 'matched `{}`, but didn\'t understand it?'.format(spec)
- elif spec.startswith('('):
- if spec.endswith(')'):
- true_spec = spec[1:-1]
- flatten = False
- elif spec.endswith(')f'):
- true_spec = spec[1:-2]
- flatten = True
- else:
- assert False, 'found unclosed aggregate `{}`'.format(spec)
-
- for elems in itertools.product(*(TypeSpec(subspec).enumerate(width, previous)
- for subspec in true_spec.split(','))):
- yield Aggregate(flatten, elems)
- elif spec.startswith('['):
- if spec.endswith(']'):
- true_spec = spec[1:-1]
- flatten = False
- elif spec.endswith(']f'):
- true_spec = spec[1:-2]
- flatten = True
- else:
- assert False, 'found unclosed aggregate `{}`'.format(spec)
- elem_spec, count = true_spec.split(';')
-
- count = int(count)
- for elem in TypeSpec(elem_spec).enumerate(width, previous):
- yield Aggregate(flatten, [elem] * count)
- else:
- assert False, 'Failed to parse `{}`'.format(spec)
-
-class GenericIntrinsic(object):
- def __init__(self, platform, intrinsic, widths, llvm_name, ret, args):
- self._platform = platform
- self.intrinsic = intrinsic
- self.widths = map(int, widths)
- self.llvm_name = llvm_name
- self.ret = TypeSpec(ret)
- self.args = list(map(TypeSpec, args))
-
- def monomorphise(self):
- for width in self.widths:
- # must be a power of two
- assert width & (width - 1) == 0
- def recur(processed, untouched):
- if not untouched:
- ret = processed[0]
- args = processed[1:]
- yield MonomorphicIntrinsic(self._platform, self.intrinsic, width,
- self.llvm_name,
- ret, args)
- else:
- raw_arg = untouched[0]
- rest = untouched[1:]
- for arg in raw_arg.enumerate(width, processed):
- for intr in recur(processed + [arg], rest):
- yield intr
-
- for x in recur([], [self.ret] + self.args):
- yield x
-
-class MonomorphicIntrinsic(object):
- def __init__(self, platform, intrinsic, width, llvm_name, ret, args):
- self._platform = platform
- self._intrinsic = intrinsic
- self._width = '' if width == 64 else 'q'
- self._llvm_name = llvm_name
- self._ret_raw = ret
- self._ret = ret.type_info(platform)
- self._args_raw = args
- self._args = [arg.type_info(platform) for arg in args]
-
- def llvm_name(self):
- if self._llvm_name.startswith('!'):
- return self._llvm_name[1:].format(self._ret, *self._args)
- else:
- return self._platform.llvm_prefix() + self._llvm_name.format(self._ret, *self._args)
-
- def intrinsic_suffix(self):
- return self._intrinsic.format(self._ret,
- *self._args,
- width = self._width)
-
- def platform_prefix(self):
- return self._platform.platform().platform_prefix()
-
- def intrinsic_set_name(self):
- return self._platform.intrinsic_prefix()
-
- def intrinsic_name(self):
- return self._platform.intrinsic_prefix() + self.intrinsic_suffix()
-
- def compiler_args(self):
- return ', '.join(arg.compiler_ctor_ref() for arg in self._args_raw)
-
- def compiler_ret(self):
- return self._ret_raw.compiler_ctor_ref()
-
- def compiler_signature(self):
- return '({}) -> {}'.format(self.compiler_args(), self.compiler_ret())
-
- def intrinsic_signature(self):
- names = 'xyzwabcdef'
- return '({}) -> {}'.format(', '.join('{}: {}'.format(name, arg.rust_name())
- for name, arg in zip(names, self._args_raw)),
- self._ret_raw.rust_name())
-
-def parse_args():
- parser = argparse.ArgumentParser(
- formatter_class = argparse.RawDescriptionHelpFormatter,
- description = 'Render an intrinsic definition JSON to various formats.',
- epilog = textwrap.dedent('''\
- Quick How-To:
-
- There are two operating modes: single file and multiple files.
-
- For example, ARM is specified as a single file. To generate the
- compiler-definitions for ARM just pass the script the "arm.json" file:
-
- python generator.py --format compiler-defs arm.json
-
- The X86 architecture is specified as multiple files (for the different
- instruction sets that x86 supports). To generate the compiler
- definitions one needs to pass the script a "platform information file"
- (with the -i flag) next to the files of the different instruction sets.
- For example, to generate the X86 compiler-definitions for SSE4.2, just:
-
- python generator.py --format compiler-defs -i x86/info.json sse42.json
-
- And to generate the compiler-definitions for SSE4.1 and SSE4.2, just:
-
- python generator.py --format compiler-defs -i x86/info.json sse41.json sse42.json
-
- An intrinsic definition consists of a map with fields:
- - intrinsic: pattern for the name(s) of the vendor's C intrinsic(s)
- - llvm: pattern for the name(s) of the internal llvm intrinsic(s)
- - width: a vector of vector bit-widths the pattern works with
- - ret: type specifier for the return value
- - arguments: vector of type specifiers for arguments
-
- The width and types describe a range of possible intrinsics,
- and these are fed back into the intrinsic and llvm patterns to
- create the appropriate definitions.
-
- ## Type specifier grammar
-
- ```
- type := core_type modifier* suffix?
-
- core_type := void | vector | scalar | aggregate | reference
-
- modifier := 'v' | 'h' | 'd' | 'n' | 'w' | 'u' | 's' |
- 'x' number | '.' number
- suffix := pointer | bitcast
- pointer := 'Pm' llvm_pointer? | 'Pc' llvm_pointer?
- llvm_pointer := '/' type
- bitcast := '->' type
-
- void := 'V'
-
- vector := vector_elem width |
- vector_elem := 'i' | 'u' | 's' | 'f'
-
- scalar := scalar_type number llvm_width?
- scalar_type := 'U' | 'S' | 'F'
- llvm_width := '/' number
-
- aggregate := '(' (type),* ')' 'f'? | '[' type ';' number ']' 'f'?
-
- reference := number
-
- width = number | '(' number '-' number ')'
-
- number = [0-9]+
- ```
-
- ## Void
-
- The `V` type corresponds to `void` in LLVM (`()` in
- Rust). It's likely to only work in return position.
-
- ## Vectors
-
- The vector grammar is a pattern describing many possibilities
- for arguments/return value. The `vector_elem` describes the
- types of elements to use, and the `width` describes the (range
- of) widths for those elements, which are then placed into a
- vector with the `width` bitwidth. E.g. if an intrinsic has a
- `width` that includes 128, and the return value is `i(8-32)`,
- then some instantiation of that intrinsic will be `u8x16`,
- `u32x4`, `i32x4`, etc.
-
- ### Elements
-
- - i: integer, both signed and unsigned
- - u: unsigned integer
- - s: signed integer
- - f: float
-
- ## Scalars
-
- Similar to vectors, but these describe a single concrete type,
- not a range. The number is the bitwidth. The optional
- `llvm_width` is the bitwidth of the integer that should be
- passed to LLVM (by truncating the Rust argument): this only
- works with scalar integers and the LLVM width must be smaller
- than the Rust width.
-
- ### Types
-
- - U: unsigned integer
- - S: signed integer
- - F: float
-
- ## Aggregates
-
- An aggregate is a collection of multiple types; a tuple in
- Rust terms, or an unnamed struct in LLVM. The `f` modifiers
- forces the tuple to be flattened in the LLVM
- intrinsic. E.g. if `llvm.foo` takes `(F32,S32)`:
-
- - no `f` corresponds to `declare ... @llvm.foo({float, i32})`.
- - having an `f` corresponds to `declare ... @llvm.foo(float, i32)`.
-
- The `[type;number]` form is a just shorter way to write
- `(...)`, except avoids doing a cartesian product of generic
- types, e.g. `[S32;2]` is the same as `(S32, S32)`, while
- `[I32;2]` is describing just the two types `(S32,S32)` and
- `(U32,U32)` (i.e. doesn't include `(S32,U32)`, `(U32,S32)` as
- `(I32,I32)` would).
-
- (Currently aggregates can not contain other aggregates.)
-
- ## References
-
- A reference uses the type of another argument, with possible
- modifications. The number refers to the type to use, starting
- with 0 == return value, 1 == first argument, 2 == second
- argument, etc.
-
- ## Affixes
-
- The `modifier` and `suffix` adaptors change the precise
- representation.
-
- ### Modifiers
-
- - 'v': put a scalar into a vector of the current width (u32 -> u32x4, when width == 128)
- - 'S': get the scalar element of a vector (u32x4 -> u32)
- - 'h': half the length of the vector (u32x4 -> u32x2)
- - 'd': double the length of the vector (u32x2 -> u32x4)
- - 'n': narrow the element of the vector (u32x4 -> u16x4)
- - 'w': widen the element of the vector (u16x4 -> u32x4)
- - 'N': half the length of the vector element (u32x4 -> u16x8)
- - 'W': double the length of the vector element (u16x8 -> u32x4)
- - 'u': force a number (vector or scalar) to be unsigned int (f32x4 -> u32x4)
- - 's': force a number (vector or scalar) to be signed int (u32x4 -> i32x4)
- - 'f': force a number (vector or scalar) to be float (u32x4 -> f32x4)
- - 'x' number: force the type to be a vector of bitwidth `number`.
- - '.' number: get the `number`th element of an aggregate
- - 'D': dereference a pointer (*mut u32 -> u32)
- - 'C': make a pointer const (*mut u32 -> *const u32)
- - 'M': make a pointer mut (*const u32 -> *mut u32)
-
- ### Pointers
-
- Pointers can be created of any type by appending a `P*`
- suffix. The `m` vs. `c` chooses mut vs. const. e.g. `S32Pm`
- corresponds to `*mut i32`, and `i32Pc` corresponds (with width
- 128) to `*const i8x16`, `*const u32x4`, etc.
-
- The type after the `/` (optional) represents the type used
- internally to LLVM, e.g. `S32pm/S8` is exposed as `*mut i32`
- in Rust, but is `i8*` in LLVM. (This defaults to the main
- type).
-
- ### Bitcast
-
- The `'->' type` bitcast suffix will cause the value to be
- bitcast to the right-hand type when calling the intrinsic,
- e.g. `s32->f32` will expose the intrinsic as `i32x4` at the
- Rust level, but will cast that vector to `f32x4` when calling
- the LLVM intrinsic.
- '''))
- parser.add_argument('--format', choices=FORMATS, required=True,
- help = 'Output format.')
- parser.add_argument('-o', '--out', type=argparse.FileType('w'), default=sys.stdout,
- help = 'File to output to (default stdout).')
- parser.add_argument('-i', '--info', type=argparse.FileType('r'),
- help = 'File containing platform specific information to merge into '
- 'the input files\' header.')
- parser.add_argument('in_', metavar="FILE", type=argparse.FileType('r'), nargs='+',
- help = 'JSON files to load')
- return parser.parse_args()
-
-
-class ExternBlock(object):
- def __init__(self):
- pass
-
- @staticmethod
- def open(platform):
- return 'extern "platform-intrinsic" {'
-
- @staticmethod
- def render(mono):
- return ' fn {}{}{};'.format(mono.platform_prefix(),
- mono.intrinsic_name(),
- mono.intrinsic_signature())
-
- @staticmethod
- def close():
- return '}'
-
-class CompilerDefs(object):
- def __init__(self):
- pass
-
- @staticmethod
- def open(platform):
- return '''\
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {{Intrinsic, Type}};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {{
- if !name.starts_with("{0}") {{ return None }}
- Some(match &name["{0}".len()..] {{'''.format(platform.platform_prefix())
-
- @staticmethod
- def render(mono):
- return '''\
- "{}" => Intrinsic {{
- inputs: {{ static INPUTS: [&'static Type; {}] = [{}]; &INPUTS }},
- output: {},
- definition: Named("{}")
- }},'''.format(mono.intrinsic_set_name() + mono.intrinsic_suffix(),
- len(mono._args_raw),
- mono.compiler_args(),
- mono.compiler_ret(),
- mono.llvm_name())
-
- @staticmethod
- def close():
- return '''\
- _ => return None,
- })
-}'''
-
-FORMATS = {
- 'extern-block': ExternBlock(),
- 'compiler-defs': CompilerDefs(),
-}
-
-
-def main():
- args = parse_args()
- ins = args.in_
- out = args.out
- out_format = FORMATS[args.format]
- info = args.info
- one_file_no_info = False
- if len(ins) > 1 and info is None:
- print('error: cannot have multiple inputs without an info header.', file=sys.stderr)
- sys.exit(1)
-
- elif info is None:
- info = ins[0]
- one_file_no_info = True
- info_json = json.load(info)
- platform = PlatformInfo(info_json)
-
- print(out_format.open(platform), file=out)
-
- for in_ in ins:
-
- if one_file_no_info:
- data = info_json
- else:
- data = json.load(in_)
- data.update(info_json)
-
- intrinsics = IntrinsicSet(platform, data)
- for intr in intrinsics.intrinsics():
- for mono in intr.monomorphise():
- print(out_format.render(mono), file=out)
-
- print(out_format.close(), file=out)
-
-if __name__ == '__main__':
- main()
diff --git a/src/etc/platform-intrinsics/hexagon/hvx_v60.json b/src/etc/platform-intrinsics/hexagon/hvx_v60.json
deleted file mode 100644
index a1897e6..0000000
--- a/src/etc/platform-intrinsics/hexagon/hvx_v60.json
+++ /dev/null
@@ -1,1326 +0,0 @@
-{
- "platform": "Q6_",
- "intrinsic_prefix": "",
- "llvm_prefix": "llvm.hexagon.V6.",
- "number_info": {
- "signed": {
- "kind": "s",
- "data_type": { "8": "b", "16": "h", "32": "w" },
- "data_type_plain": { "8": "b", "16": "h", "32": "w" }
- },
- "unsigned": {
- "kind": "u",
- "data_type": { "8": "ub", "16": "uh", "32": "uw" },
- "data_type_plain": { "8": "b", "16": "h", "32": "w" }
- },
- "float": {
- "kind": "f",
- "data_type": { "8": "b", "16": "h", "32": "w" },
- "data_type_plain": { "8": "b", "16": "h", "32": "w" }
- }
- },
- "width_info": {
- "64": { "width_b": "64", "width_suffix": "" },
- "128": { "width_b": "128", "width_suffix": ".128B" },
- "512": { "width_b": "64", "width_suffix": "" },
- "1024": { "widthd_b": "64", "width_b": "128", "width_suffix": ".128B", "widthd_suffix": "" },
- "2048": { "widthd_b": "128", "widthd_suffix": ".128B" }
- },
- "intrinsics": [
- {
- "intrinsic": "R_vextract{1.width_b}",
- "width": [512, 1024],
- "llvm": "extractw{1.width_suffix}",
- "ret": "U32",
- "args": ["u32", "U32"]
- },
- {
- "intrinsic": "V_lo{0.width_b}",
- "width": [512, 1024],
- "llvm": "lo{0.width_suffix}",
- "ret": "u32",
- "args": ["0d"]
- },
- {
- "intrinsic": "V_hi{0.width_b}",
- "width": [512, 1024],
- "llvm": "hi{0.width_suffix}",
- "ret": "u32",
- "args": ["0d"]
- },
- {
- "intrinsic": "V_vsplat_R{0.width_b}",
- "width": [512, 1024],
- "llvm": "lvsplat{1.data_type}{0.width_suffix}",
- "ret": "u32",
- "args": ["0S"]
- },
- {
- "intrinsic": "Q_and_QQ{0.width_b}",
- "width": [64, 128],
- "llvm": "pred.and{0.width_suffix}",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "Q_not_Q{0.width_b}",
- "width": [64, 128],
- "llvm": "pred.not{0.width_suffix}",
- "ret": "u32",
- "args": ["0"]
- },
- {
- "intrinsic": "Q_or_QQ{0.width_b}",
- "width": [64, 128],
- "llvm": "pred.or{0.width_suffix}",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "Q_xor_QQ{0.width_b}",
- "width": [64, 128],
- "llvm": "pred.xor{0.width_suffix}",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vabsdiff_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vabsdiff{1.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vabsdiff_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vabsdiff{1.data_type}{0.width_suffix}",
- "ret": "u(16-32)",
- "args": ["0s", "0s"]
- },
- {
- "intrinsic": "V{0.data_type}_vabs_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vabs{1.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vabs_V{1.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vabs{1.data_type}.sat{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vadd_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vadd_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}sat{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vadd_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}sat{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vadd_W{1.data_type}W{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}.dv{0.widthd_suffix}",
- "ret": "s(8-32)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vadd_W{1.data_type}W{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}sat.dv{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vadd_W{1.data_type}W{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}sat.dv{0.widthd_suffix}",
- "ret": "u(8-16)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V_valign_VVR{0.width_b}",
- "width": [512, 1024],
- "llvm": "valignb{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V_valign_VVI{0.width_b}",
- "width": [512, 1024],
- "llvm": "valignbi{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V_vlalign_VVR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlalignb{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V_vlalign_VVI{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlalignbi{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V_vand_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vand{0.width_suffix}",
- "ret": "u16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V_vand_QR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vandqrt{0.width_suffix}",
- "ret": "u8",
- "args": ["u32hhh", "U32"]
- },
- {
- "intrinsic": "V_vandor_VQR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vandqrt.acc{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "u32hhh", "U32"]
- },
- {
- "intrinsic": "Q_vand_VR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vandvrt{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["u8", "U32"]
- },
- {
- "intrinsic": "Q_vandor_QVR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vandvrt{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "u8", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasl_V{1.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasl{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasl_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasl{0.data_type}v{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vaslacc_V{1.data_type}V{2.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasl{0.data_type}.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{0.data_type}v{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vasracc_V{1.data_type}V{2.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{0.data_type}.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}V{2.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{0.data_type}{1.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0hw", "0hw", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}V{2.data_type}R_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{1.data_type}{0.data_type_plain}sat{0.width_suffix}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vasr_V{1.data_type}V{2.data_type}R_rnd_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vasr{1.data_type}{0.data_type_plain}rndsat{0.width_suffix}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws", "U32"]
- },
- {
- "intrinsic": "V_equals_V{0.width_b}",
- "width": [512, 1024],
- "llvm": "vassign{0.width_suffix}",
- "ret": "u32",
- "args": ["0"]
- },
- {
- "intrinsic": "W_equals_W{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vassignp{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vavg_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vavg{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vavg_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vavg{0.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vavg_V{1.data_type}V{2.data_type}_rnd{0.width_b}",
- "width": [512, 1024],
- "llvm": "vavgrnd{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vavg_V{1.data_type}V{2.data_type}_rnd{0.width_b}",
- "width": [512, 1024],
- "llvm": "vavgrnd{0.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vcl0_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vcl0{0.data_type_plain}{0.width_suffix}",
- "ret": "u(16-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "W_vcombine_VV{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vcombine{0.widthd_suffix}",
- "ret": "u8d",
- "args": ["0h", "0h"]
- },
- {
- "intrinsic": "V_vzero{0.width_b}",
- "width": [512, 1024],
- "llvm": "vd0{0.width_suffix}",
- "ret": "u32",
- "args": []
- },
- {
- "intrinsic": "V{0.data_type}_vdeal_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdeal{1.data_type}{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vdeale_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdeal{1.data_type}4w{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W_vdeal_VVR{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdealvdd{0.widthd_suffix}",
- "ret": "u8d",
- "args": ["0h", "0h", "U32"]
- },
- {
- "intrinsic": "V_vdelta_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdelta{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpybus{0.width_suffix}",
- "ret": "s16",
- "args": ["u8", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpybus.acc{0.width_suffix}",
- "ret": "s16",
- "args": ["s16", "u8", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdmpybus.dv{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdmpybus.dv.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["s16d", "u8d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhb{0.width_suffix}",
- "ret": "s32",
- "args": ["s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhb.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["s32", "s16", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhb.dv{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["s16d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhb.dv.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["s32d", "s16d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_W{1.data_type}Rh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhisat{0.width_suffix}",
- "ret": "s32",
- "args": ["0d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}Rh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsat{0.width_suffix}",
- "ret": "s32",
- "args": ["s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_W{1.data_type}Ruh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsuisat{0.width_suffix}",
- "ret": "s32",
- "args": ["s16d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}Ruh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsusat{0.width_suffix}",
- "ret": "s32",
- "args": ["s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpy_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhvsat{0.width_suffix}",
- "ret": "s32",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}W{2.data_type}Rh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhisat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdsad_W{1.data_type}Ruh{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdsaduh{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["u16d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vdsadacc_W{1.data_type}W{2.data_type}Ruh{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vdsaduh.acc{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["0", "u16d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}Rh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}W{2.data_type}Ruh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsuisat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "s16d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}Ruh_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhsusat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vdmpyacc_V{1.data_type}V{2.data_type}V{3.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vdmpyhvsat_acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "s16", "s16"]
- },
- {
- "intrinsic": "Q_vcmp_eq_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "veq{1.data_type}{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["s(8-32)", "1"]
- },
- {
- "intrinsic": "Q_vcmp_eqand_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "veq{2.data_type}.and{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_eqor_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "veq{2.data_type}.or{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_eqxacc_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "veq{2.data_type}.xor{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gt_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{1.data_type}{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["s(8-32)", "1"]
- },
- {
- "intrinsic": "Q_vcmp_gt_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{1.data_type}{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["u(8-16)", "1"]
- },
- {
- "intrinsic": "Q_vcmp_gtand_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.and{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtand_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.and{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "u(8-16)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtor_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.or{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtor_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.or{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "u(8-16)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtxacc_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.xor{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "s(8-32)", "2"]
- },
- {
- "intrinsic": "Q_vcmp_gtxacc_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vgt{2.data_type}.xor{0.width_suffix}",
- "ret": "u32hhh",
- "args": ["0", "u(8-16)", "2"]
- },
- {
- "intrinsic": "V{0.data_type}_vinsert_V{1.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vinsertwr{0.width_suffix}",
- "ret": "s32",
- "args": ["S32"]
- },
- {
- "intrinsic": "V{0.data_type}_vlsr_V{1.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlsr{0.data_type_plain}{0.width_suffix}",
- "ret": "u(16-32)",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vlsr_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlsr{0.data_type}v{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vlut32_V{1.data_type}V{2.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlutvv{0.data_type}{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vlut16_V{1.data_type}V{2.data_type}R{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vlutvw{0.data_type}{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["s8", "s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vlut32or_V{1.data_type}V{2.data_type}V{3.data_type}R{0.width_b}",
- "width": [512, 1024],
- "llvm": "vlutvv{0.data_type}.oracc{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0", "0", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vlut16or_W{1.data_type}V{2.data_type}V{3.data_type}R{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vlutvw{0.data_type}.oracc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "s8", "s16", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmax_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmax{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmax_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmax{0.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmin_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmin{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmin_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmin{0.data_type}{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpa_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpabus{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpaacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpabus.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpa_W{1.data_type}W{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpab{1.kind}{2.kind}v{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8d", "i8d"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpa_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpahb{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["s16d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpaacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpahb.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0", "s16d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}V{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}us{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0n", "0nu"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}V{3.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{2.data_type}us.acc{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0", "0n", "0nu"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}V{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpybusv{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8", "s8"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}V{3.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpybusv.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "0nu", "0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}V{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}v{0.widthd_suffix}",
- "ret": "i(16-32)d",
- "args": ["0n", "0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}V{3.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{2.data_type}v.acc{0.widthd_suffix}",
- "ret": "i(16-32)d",
- "args": ["0", "0n", "0n"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpye_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyewuh{0.width_suffix}",
- "ret": "s32",
- "args": ["s32", "u16"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}R{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}{0.widthd_suffix}",
- "ret": "i32d",
- "args": ["0n", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}R{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{2.data_type}sat.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0", "0n", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpy_V{1.data_type}R{1.data_type}_s1_rnd_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}srs{0.width_suffix}",
- "ret": "s32",
- "args": ["0nd", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpy_V{1.data_type}R{1.data_type}_s1_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}ss{0.width_suffix}",
- "ret": "s32",
- "args": ["0nd", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpy_V{1.data_type}V{2.data_type}_s1_rnd_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}vsrs{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyieo_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyieo{1.data_type}{0.width_suffix}",
- "ret": "s32",
- "args": ["0nd", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyieacc_V{1.data_type}V{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyie{2.data_type}{3.data_type}.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "i16"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyie_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyie{1.data_type}{2.data_type}{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "u16"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyi_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyiacc_V{1.data_type}V{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}.acc{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyi_V{1.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}b{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyiacc_V{1.data_type}V{2.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}b.acc{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyi_V{1.data_type}Rh{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}h{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyiacc_V{1.data_type}V{2.data_type}Rh{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}h.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyi_V{1.data_type}Rub{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}ub{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyiacc_V{1.data_type}V{2.data_type}Rub{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyi{1.data_type}ub.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyo_V{1.data_type}V{2.data_type}_s1_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyo{1.data_type}{2.data_type}{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyo_V{1.data_type}V{2.data_type}_s1_rnd_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyo{1.data_type}{2.data_type}.rnd{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyo_V{1.data_type}V{2.data_type}_s1_rnd_sat_shift{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyo{1.data_type}{2.data_type}.rnd.sacc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyo_V{1.data_type}V{2.data_type}_s1_sat_shift{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyo{1.data_type}{2.data_type}.sacc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "V{0.data_type}_vmpyio_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmpyio{1.data_type}{2.data_type}{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "0nd"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpy_V{1.data_type}R{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{1.data_type}{0.widthd_suffix}",
- "ret": "u16d",
- "args": ["0n", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vmpyacc_W{1.data_type}V{2.data_type}R{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vmpy{2.data_type}.acc{0.widthd_suffix}",
- "ret": "u(16-32)d",
- "args": ["0", "0n", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vmux_QVV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vmux{0.width_suffix}",
- "ret": "u32",
- "args": ["0hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vnavg_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vnavg{0.data_type}{0.width_suffix}",
- "ret": "i(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vnavg_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vnavg{0.data_type}{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vnormamt_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vnormamt{0.data_type}{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "V_vnot_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vnot{0.width_suffix}",
- "ret": "u16",
- "args": ["0"]
- },
- {
- "intrinsic": "V_vor_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vor{0.width_suffix}",
- "ret": "u16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vpacke_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vpack{1.data_type}e{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0hw", "0hw"]
- },
- {
- "intrinsic": "V{0.data_type}_vpacko_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vpack{1.data_type}o{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0hw", "0hw"]
- },
- {
- "intrinsic": "V{0.data_type}_vpack_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vpack{1.data_type}{0.data_type}.sat{0.width_suffix}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws"]
- },
- {
- "intrinsic": "V{0.data_type}_vpopcount_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vpopcount{0.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0"]
- },
- {
- "intrinsic": "V_vrdelta_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrdelta{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpy_V{1.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpybus{0.width_suffix}",
- "ret": "s32",
- "args": ["u8", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpyacc_V{1.data_type}V{2.data_type}Rb{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpybus.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "u8", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrmpy_W{1.data_type}RbI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrmpybusi{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrmpyacc_W{1.data_type}W{2.data_type}RbI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrmpybusi.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpy_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpybusv{0.width_suffix}",
- "ret": "s32",
- "args": ["u8", "s8"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpyacc_V{1.data_type}V{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpybusv.acc{0.width_suffix}",
- "ret": "s32",
- "args": ["0", "u8", "s8"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpy_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpy{1.data_type}v{0.width_suffix}",
- "ret": "i32",
- "args": ["0nndd", "0nndd"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpyacc_V{1.data_type}V{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpy{1.data_type}v.acc{0.width_suffix}",
- "ret": "i32",
- "args": ["0", "0nndd", "0nndd"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpy_V{1.data_type}Rub{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpyub{0.width_suffix}",
- "ret": "u32",
- "args": ["u8", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vrmpyacc_V{1.data_type}V{2.data_type}Rub{0.width_b}",
- "width": [512, 1024],
- "llvm": "vrmpyub.acc{0.width_suffix}",
- "ret": "u32",
- "args": ["0", "u8", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrmpy_W{1.data_type}RubI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrmpyubi{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrmpyacc_W{1.data_type}W{2.data_type}RubI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrmpyubi.acc{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "V_vror_VR{0.width_b}",
- "width": [512, 1024],
- "llvm": "vror{0.width_suffix}",
- "ret": "u8",
- "args": ["0", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vround_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vround{1.data_type}{0.data_type}{0.width_suffix}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws"]
- },
- {
- "intrinsic": "W{0.data_type}_vrsad_W{1.data_type}RubI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrsadubi{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vrsadacc_W{1.data_type}W{2.data_type}RubI{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vrsadubi.acc{0.widthd_suffix}",
- "ret": "u32d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vsat_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsat{1.data_type}{0.data_type}{0.width_suffix}",
- "ret": "u8",
- "args": ["0hws", "0hws"]
- },
- {
- "intrinsic": "V{0.data_type}_vsat_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsat{1.data_type}{0.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0hw", "0hw"]
- },
- {
- "intrinsic": "W{0.data_type}_vsxt_V{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vs{1.data_type}{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vzxt_V{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vz{1.data_type_plain}{0.widthd_suffix}",
- "ret": "u(16-32)d",
- "args": ["0n"]
- },
- {
- "intrinsic": "V{0.data_type}_condacc_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}q{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["u32hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_condacc_QnV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vadd{0.data_type}nq{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["u32hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_condnac_QV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}q{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["u32hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_condnac_QnV{2.data_type}V{3.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}nq{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["u32hhh", "0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffe_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshufe{1.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffo_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshufo{1.data_type}{0.width_suffix}",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuff_V{1.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshuff{1.data_type}{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffe_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshuffe{1.data_type}{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffo_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshuffo{1.data_type}{0.width_suffix}",
- "ret": "s8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vshuffoe_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vshuffoe{1.data_type}{0.width_suffix}",
- "ret": "s(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W_vshuff_VVR{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vshufvvd{0.widthd_suffix}",
- "ret": "u8d",
- "args": ["0h", "0h", "U32"]
- },
- {
- "intrinsic": "V{0.data_type}_vsub_V{1.data_type}V{2.data_type}{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}{0.width_suffix}",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vsub_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}sat{0.width_suffix}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "V{0.data_type}_vsub_V{1.data_type}V{2.data_type}_sat{0.width_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}sat{0.width_suffix}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vsub_W{1.data_type}W{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}.dv{0.widthd_suffix}",
- "ret": "s(8-32)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vsub_W{1.data_type}W{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}sat.dv{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W{0.data_type}_vsub_W{1.data_type}W{2.data_type}_sat{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vsub{0.data_type}sat.dv{0.widthd_suffix}",
- "ret": "u(8-16)d",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "W_vswap_QVV{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vswap{0.widthd_suffix}",
- "ret": "u8d",
- "args": ["u32hhh", "0h", "0h"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpyb{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0nd", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpyb.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "0nd", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpybus{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpybus.acc{0.widthd_suffix}",
- "ret": "s16d",
- "args": ["0", "u8d", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpy_W{1.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpyhb{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0nd", "U32"]
- },
- {
- "intrinsic": "W{0.data_type}_vunpack_V{1.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vunpack{1.data_type}{0.widthd_suffix}",
- "ret": "i(16-32)d",
- "args": ["0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vunpackoor_W{1.data_type}V{2.data_type}{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vunpacko{2.data_type}{0.widthd_suffix}",
- "ret": "s(16-32)d",
- "args": ["0", "0n"]
- },
- {
- "intrinsic": "W{0.data_type}_vtmpyacc_W{1.data_type}W{2.data_type}Rb{0.widthd_b}",
- "width": [512, 1024],
- "llvm": "vtmpyhb.acc{0.widthd_suffix}",
- "ret": "s32d",
- "args": ["0", "0nd", "U32"]
- },
- {
- "intrinsic": "V_vxor_VV{0.width_b}",
- "width": [512, 1024],
- "llvm": "vxor{0.width_suffix}",
- "ret": "u16",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/nvptx/cuda.json b/src/etc/platform-intrinsics/nvptx/cuda.json
deleted file mode 100644
index 1beaaeb..0000000
--- a/src/etc/platform-intrinsics/nvptx/cuda.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "intrinsic_prefix": "_",
- "llvm_prefix": "llvm.cuda.",
- "intrinsics": [
- {
- "intrinsic": "syncthreads",
- "width": ["0"],
- "llvm": "syncthreads",
- "ret": "V",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/nvptx/info.json b/src/etc/platform-intrinsics/nvptx/info.json
deleted file mode 100644
index 80332c5..0000000
--- a/src/etc/platform-intrinsics/nvptx/info.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "platform": "nvptx",
- "number_info": {
- "signed": {}
- },
- "width_info": {}
-}
diff --git a/src/etc/platform-intrinsics/nvptx/sreg.json b/src/etc/platform-intrinsics/nvptx/sreg.json
deleted file mode 100644
index 33d97f2..0000000
--- a/src/etc/platform-intrinsics/nvptx/sreg.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
- "intrinsic_prefix": "_",
- "llvm_prefix": "llvm.nvvm.read.ptx.sreg.",
- "intrinsics": [
- {
- "intrinsic": "block_dim_x",
- "width": ["0"],
- "llvm": "ntid.x",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_dim_y",
- "width": ["0"],
- "llvm": "ntid.y",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_dim_z",
- "width": ["0"],
- "llvm": "ntid.z",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_idx_x",
- "width": ["0"],
- "llvm": "ctaid.x",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_idx_y",
- "width": ["0"],
- "llvm": "ctaid.y",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "block_idx_z",
- "width": ["0"],
- "llvm": "ctaid.z",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "grid_dim_x",
- "width": ["0"],
- "llvm": "nctaid.x",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "grid_dim_y",
- "width": ["0"],
- "llvm": "nctaid.y",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "grid_dim_z",
- "width": ["0"],
- "llvm": "nctaid.z",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "thread_idx_x",
- "width": ["0"],
- "llvm": "tid.x",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "thread_idx_y",
- "width": ["0"],
- "llvm": "tid.y",
- "ret": "S32",
- "args": []
- },
- {
- "intrinsic": "thread_idx_z",
- "width": ["0"],
- "llvm": "tid.z",
- "ret": "S32",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/powerpc.json b/src/etc/platform-intrinsics/powerpc.json
deleted file mode 100644
index acb6813..0000000
--- a/src/etc/platform-intrinsics/powerpc.json
+++ /dev/null
@@ -1,294 +0,0 @@
-{
- "platform": "powerpc",
- "intrinsic_prefix": "_vec_",
- "llvm_prefix": "llvm.ppc.altivec.",
- "number_info": {
- "unsigned": {
- "kind" : "u",
- "data_type_short": { "8": "b", "16": "h", "32": "w", "64": "d" }
- },
- "signed": {
- "kind" : "s",
- "data_type_short": { "8": "b", "16": "h", "32": "w", "64": "d" }
- },
- "float": {}
- },
- "width_info": {
- "128": { "width": "" }
- },
- "intrinsics": [
- {
- "intrinsic": "perm",
- "width": [128],
- "llvm": "vperm",
- "ret": "s32",
- "args": ["0", "0", "s8"]
- },
- {
- "intrinsic": "mradds",
- "width": [128],
- "llvm": "vmhraddshs",
- "ret": "s16",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "cmpb",
- "width": [128],
- "llvm": "vcmpbfp",
- "ret": "s32",
- "args": ["f32", "f32"]
- },
- {
- "intrinsic": "cmpeq{0.data_type_short}",
- "width": [128],
- "llvm": "vcmpequ{0.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "cmpgt{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vcmpgt{1.kind}{1.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0u", "1"]
- },
- {
- "intrinsic": "cmpgt{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vcmpgt{1.kind}{1.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0", "1"]
- },
- {
- "intrinsic": "max{0.kind}{0.data_type_short}",
- "width": [128],
- "llvm": "vmax{0.kind}{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "min{0.kind}{0.data_type_short}",
- "width": [128],
- "llvm": "vmin{0.kind}{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sub{0.kind}{0.data_type_short}s",
- "width": [128],
- "llvm": "vsub{0.kind}{0.data_type_short}s",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "subc",
- "width": [128],
- "llvm": "vsubcuw",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "add{0.kind}{0.data_type_short}s",
- "width": [128],
- "llvm": "vadd{0.kind}{0.data_type_short}s",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "addc",
- "width": [128],
- "llvm": "vaddcuw",
- "ret": "u32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "mule{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vmule{0.kind}{1.data_type_short}",
- "ret": "i(16-32)",
- "args": ["0N", "1"]
- },
- {
- "intrinsic": "mulo{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vmulo{0.kind}{1.data_type_short}",
- "ret": "i(16-32)",
- "args": ["0N", "1"]
- },
- {
- "intrinsic": "avg{0.kind}{0.data_type_short}",
- "width": [128],
- "llvm": "vavg{0.kind}{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "packs{0.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vpk{0.kind}{1.data_type_short}{0.kind}s",
- "ret": "i(8-16)",
- "args": ["0W", "1"]
- },
- {
- "intrinsic": "packsu{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vpk{1.kind}{1.data_type_short}{0.kind}s",
- "ret": "u(8-16)",
- "args": ["0Ws", "1"]
- },
- {
- "intrinsic": "packpx",
- "width": [128],
- "llvm": "vpkpx",
- "ret": "s16",
- "args": ["s32", "s32"]
- },
- {
- "intrinsic": "unpackl{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vupkl{1.kind}{1.data_type_short}",
- "ret": "s(16-32)",
- "args": ["0N"]
- },
- {
- "intrinsic": "unpackh{1.kind}{1.data_type_short}",
- "width": [128],
- "llvm": "vupkh{1.kind}{1.data_type_short}",
- "ret": "s(16-32)",
- "args": ["0N"]
- },
- {
- "intrinsic": "madds",
- "width": [128],
- "llvm": "vmhaddshs",
- "ret": "s16",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "msumu{1.data_type_short}m",
- "width": [128],
- "llvm": "vmsumu{1.data_type_short}m",
- "ret": "u32",
- "args": ["u(8-16)", "1", "u32"]
- },
- {
- "intrinsic": "msummbm",
- "width": [128],
- "llvm": "vmsummbm",
- "ret": "s32",
- "args": ["s8", "u8", "s32"]
- },
- {
- "intrinsic": "msumshm",
- "width": [128],
- "llvm": "vmsumshm",
- "ret": "s32",
- "args": ["s16", "s16", "s32"]
- },
- {
- "intrinsic": "msum{0.kind}hs",
- "width": [128],
- "llvm": "vmsum{0.kind}hs",
- "ret": "i32",
- "args": ["0N", "0N", "0"]
- },
- {
- "intrinsic": "sum2s",
- "width": [128],
- "llvm": "vsum2sws",
- "ret": "s32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "sum4{0.kind}bs",
- "width": [128],
- "llvm": "vsum4{0.kind}bs",
- "ret": "i32",
- "args": ["0NN", "0"]
- },
- {
- "intrinsic": "sum4shs",
- "width": [128],
- "llvm": "vsum4shs",
- "ret": "s32",
- "args": ["0N", "0"]
- },
- {
- "intrinsic": "sums",
- "width": [128],
- "llvm": "vsumsws",
- "ret": "s32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "madd",
- "width": [128],
- "llvm": "vmaddfp",
- "ret": "f32",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "nmsub",
- "width": [128],
- "llvm": "vnmsubfp",
- "ret": "f32",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "expte",
- "width": [128],
- "llvm": "vexptefp",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "floor",
- "width": [128],
- "llvm": "vrfim",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "ceil",
- "width": [128],
- "llvm": "vrfip",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "round",
- "width": [128],
- "llvm": "vrfin",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "trunc",
- "width": [128],
- "llvm": "vrfiz",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "loge",
- "width": [128],
- "llvm": "vlogefp",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "re",
- "width": [128],
- "llvm": "vrefp",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "rsqrte",
- "width": [128],
- "llvm": "vrsqrtefp",
- "ret": "f32",
- "args": ["0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/avx.json b/src/etc/platform-intrinsics/x86/avx.json
deleted file mode 100644
index 1f41e2e..0000000
--- a/src/etc/platform-intrinsics/x86/avx.json
+++ /dev/null
@@ -1,272 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.avx.",
- "intrinsics": [
- {
- "intrinsic": "256_addsub_{0.data_type}",
- "width": [256],
- "llvm": "addsub.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_blendv_{0.data_type}",
- "width": [256],
- "llvm": "blendv.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "256_broadcast_{0.data_type}",
- "width": [256],
- "llvm": "vbroadcastf128.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["s8SPc"]
- },
- {
- "intrinsic": "256_cmp_{0.data_type}",
- "width": [256],
- "llvm": "cmp.{1.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0", "s8S"]
- },
- {
- "intrinsic": "256_cvtepi32_pd",
- "width": [256],
- "llvm": "cvtdq2.pd.256",
- "ret": "f64",
- "args": ["s32h"]
- },
- {
- "intrinsic": "256_cvtepi32_ps",
- "width": [256],
- "llvm": "cvtdq2.ps.256",
- "ret": "f32",
- "args": ["s32"]
- },
- {
- "intrinsic": "256_cvtpd_epi32",
- "width": [256],
- "llvm": "cvt.pd2dq.256",
- "ret": "s32h",
- "args": ["f64"]
- },
- {
- "intrinsic": "256_cvtpd_ps",
- "width": [256],
- "llvm": "cvt.pd2.ps.256",
- "ret": "f32h",
- "args": ["f64"]
- },
- {
- "intrinsic": "256_cvtps_epi32",
- "width": [256],
- "llvm": "cvt.ps2dq.256",
- "ret": "s32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_cvtps_pd",
- "width": [256],
- "llvm": "cvt.ps2.pd.256",
- "ret": "f64",
- "args": ["f32h"]
- },
- {
- "intrinsic": "256_cvttpd_epi32",
- "width": [256],
- "llvm": "cvtt.pd2dq.256",
- "ret": "s32h",
- "args": ["f64"]
- },
- {
- "intrinsic": "256_cvttps_epi32",
- "width": [256],
- "llvm": "cvtt.ps2dq.256",
- "ret": "s32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_dp_ps",
- "width": [256],
- "llvm": "dp.ps.256",
- "ret": "f32",
- "args": ["0", "0", "S32/8"]
- },
- {
- "intrinsic": "256_hadd_{0.data_type}",
- "width": [256],
- "llvm": "hadd.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hsub_{0.data_type}",
- "width": [256],
- "llvm": "hsub.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_max_{0.data_type}",
- "width": [256],
- "llvm": "max.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_maskload_{0.data_type}",
- "width": [128, 256],
- "llvm": "maskload.{0.data_type_short}{0.width_suffix}",
- "ret": ["f(32-64)"],
- "args": ["0SPc/S8", "0s->0"]
- },
- {
- "intrinsic": "{3.width_mm}_maskstore_{3.data_type}",
- "width": [128, 256],
- "llvm": "maskstore.{3.data_type_short}{3.width_suffix}",
- "ret": "V",
- "args": ["F(32-64)Pm/S8", "1Dsv->1Dv", "1Dv"]
- },
- {
- "intrinsic": "256_min_{0.data_type}",
- "width": [256],
- "llvm": "min.{0.data_type}.256",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_movemask_ps",
- "width": [256],
- "llvm": "movmsk.ps.256",
- "ret": "S32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_movemask_pd",
- "width": [256],
- "llvm": "movmsk.pd.256",
- "ret": "S32",
- "args": ["f64"]
- },
- {
- "intrinsic": "{0.width_mm}_permutevar_{0.data_type}",
- "width": [128, 256],
- "llvm": "vpermilvar.{0.data_type}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "256_rcp_ps",
- "width": [256],
- "llvm": "rcp.ps.256",
- "ret": "f32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_rsqrt_ps",
- "width": [256],
- "llvm": "rsqrt.ps.256",
- "ret": "f32",
- "args": ["f32"]
- },
- {
- "intrinsic": "256_storeu_{2.data_type}",
- "width": [256],
- "llvm": "storeu.ps.256",
- "ret": "V",
- "args": ["f(32-64)Pm/U8", "1D"]
- },
- {
- "intrinsic": "256_storeu_si256",
- "width": [256],
- "llvm": "storeu.dq.256",
- "ret": "V",
- "args": ["u8Pm/U8", "1D"]
- },
- {
- "intrinsic": "256_sqrt_{0.data_type}",
- "width": [256],
- "llvm": "!llvm.sqrt.{0.llvm_name}",
- "ret": "f(32-64)",
- "args": ["0"]
- },
- {
- "intrinsic": "{1.width_mm}_testc_ps",
- "width": [128, 256],
- "llvm": "vtestc.ps{1.width_suffix}",
- "ret": "S32",
- "args": ["f32", "f32"]
- },
- {
- "intrinsic": "{1.width_mm}_testc_pd",
- "width": [128, 256],
- "llvm": "vtestc.pd{1.width_suffix}",
- "ret": "S32",
- "args": ["f64", "f64"]
- },
- {
- "intrinsic": "256_testc_si256",
- "width": [256],
- "llvm": "ptestc.256",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "{1.width_mm}_testnzc_ps",
- "width": [128, 256],
- "llvm": "vtestnzc.ps{1.width_suffix}",
- "ret": "S32",
- "args": ["f32", "f32"]
- },
- {
- "intrinsic": "{1.width_mm}_testnzc_pd",
- "width": [128, 256],
- "llvm": "vtestnzc.pd{1.width_suffix}",
- "ret": "S32",
- "args": ["f64", "f64"]
- },
- {
- "intrinsic": "256_testnzc_si256",
- "width": [256],
- "llvm": "ptestnzc.256",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "{1.width_mm}_testz_ps",
- "width": [128, 256],
- "llvm": "vtestz.ps{1.width_suffix}",
- "ret": "S32",
- "args": ["f32", "f32"]
- },
- {
- "intrinsic": "{1.width_mm}_testz_pd",
- "width": [128, 256],
- "llvm": "vtestz.pd{1.width_suffix}",
- "ret": "S32",
- "args": ["f64", "f64"]
- },
- {
- "intrinsic": "256_testz_si256",
- "width": [256],
- "llvm": "ptestz.256",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "256_zeroall",
- "width": [256],
- "llvm": "vzeroall",
- "ret": "V",
- "args": []
- },
- {
- "intrinsic": "256_zeroupper",
- "width": [256],
- "llvm": "vzeroupper",
- "ret": "V",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/avx2.json b/src/etc/platform-intrinsics/x86/avx2.json
deleted file mode 100644
index dc055b5..0000000
--- a/src/etc/platform-intrinsics/x86/avx2.json
+++ /dev/null
@@ -1,202 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.avx2.",
- "intrinsics": [
- {
- "intrinsic": "256_abs_{0.data_type}",
- "width": [256],
- "llvm": "pabs.{0.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "256_adds_{0.data_type}",
- "width": [256],
- "llvm": "padd{0.kind_short}s.{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_avg_{0.data_type}",
- "width": [256],
- "llvm": "pavg.{0.data_type_short}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hadd_{0.data_type}",
- "width": [256],
- "llvm": "phadd.{0.data_type_short}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hadds_epi16",
- "width": [256],
- "llvm": "phadd.sw",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hsub_{0.data_type}",
- "width": [256],
- "llvm": "phsub.{0.data_type_short}",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_hsubs_epi16",
- "width": [256],
- "llvm": "phsub.sw",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_madd_epi16",
- "width": [256],
- "llvm": "pmadd.wd",
- "ret": "s32",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "256_maddubs_epi16",
- "width": [256],
- "llvm": "pmadd.ub.sw",
- "ret": "s16",
- "args": ["s8", "s8"]
- },
- {
- "intrinsic": "{0.width_mm}_mask_i32gather_{0.data_type}",
- "width": [128, 256],
- "llvm": "gather.d.{0.data_type_short}{0.width_suffix}",
- "ret": ["s32", "f32"],
- "args": ["0", "0SPc/S8", "s32", "0s->0", "S32/8"]
- },
- {
- "intrinsic": "{0.width_mm}_mask_i32gather_{0.data_type}",
- "width": [128, 256],
- "llvm": "gather.d.{0.data_type_short}{0.width_suffix}",
- "ret": ["s64", "f64"],
- "args": ["0", "0SPc/S8", "s32x128", "0s->0", "S32/8"]
- },
- {
- "intrinsic": "{3.width_mm}_mask_i64gather_{0.data_type}",
- "width": [128, 256],
- "llvm": "gather.q.{0.data_type_short}{0.width_suffix}",
- "ret": ["s32x128", "f32x128"],
- "args": ["0", "0SPc/S8", "s64", "0s->0", "S32/8"]
- },
- {
- "intrinsic": "{0.width_mm}_mask_i64gather_{0.data_type}",
- "width": [128, 256],
- "llvm": "gather.q.{0.data_type_short}{0.width_suffix}",
- "ret": ["s64", "f64"],
- "args": ["0", "0SPc/S8", "s64", "0s->0", "S32/8"]
- },
- {
- "intrinsic": "{0.width_mm}_maskload_{0.data_type}",
- "width": [128, 256],
- "llvm": "maskload.{0.data_type_short}{0.width_suffix}",
- "ret": ["s(32-64)"],
- "args": ["0Pc/S8", "0"]
- },
- {
- "intrinsic": "{2.width_mm}_maskstore_{2.data_type}",
- "width": [128, 256],
- "llvm": "maskstore.{2.data_type_short}{2.width_suffix}",
- "ret": "V",
- "args": ["S(32-64)Pm/S8", "1Dv", "2"]
- },
- {
- "intrinsic": "256_max_{0.data_type}",
- "width": [256],
- "llvm": "pmax{0.kind}.{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_min_{0.data_type}",
- "width": [256],
- "llvm": "pmin{0.kind}.{0.data_type_short}",
- "ret": "i(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_movemask_epi8",
- "width": [256],
- "llvm": "pmovmskb",
- "ret": "S32",
- "args": ["s8"]
- },
- {
- "intrinsic": "256_mpsadbw_epu8",
- "width": [256],
- "llvm": "mpsadbw",
- "ret": "u16",
- "args": ["u8", "u8", "S32/8"]
- },
- {
- "intrinsic": "256_mul_{0.data_type}",
- "width": [256],
- "llvm": "pmul{0.data_type_short}.dq",
- "ret": "i64",
- "args": ["0dn", "0dn"]
- },
- {
- "intrinsic": "256_mulhi_{0.data_type}",
- "width": [256],
- "llvm": "pmulh{0.data_type_short}.w",
- "ret": "i16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_mulhrs_epi16",
- "width": [256],
- "llvm": "pmul.hr.sw",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_pack{0.kind_short}s_{1.data_type}",
- "width": [256],
- "llvm": "pack{0.kind}s{1.data_type_short}{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0hws", "0hws"]
- },
- {
- "intrinsic": "256_permutevar8x32_{0.data_type}",
- "width": [256],
- "llvm": "perm{0.data_type_short}",
- "ret": ["s32", "f32"],
- "args": ["0", "0s"]
- },
- {
- "intrinsic": "256_sad_epu8",
- "width": [256],
- "llvm": "psad.bw",
- "ret": "u64",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_shuffle_epi8",
- "width": [256],
- "llvm": "pshuf.b",
- "ret": "s8",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_sign_{0.data_type}",
- "width": [256],
- "llvm": "psign.{0.data_type_short}",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "256_subs_{0.data_type}",
- "width": [256],
- "llvm": "psub{0.kind_short}s.{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/bmi.json b/src/etc/platform-intrinsics/x86/bmi.json
deleted file mode 100644
index 24e2cbc..0000000
--- a/src/etc/platform-intrinsics/x86/bmi.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "intrinsic_prefix": "_bmi",
- "llvm_prefix": "llvm.x86.bmi.",
- "intrinsics": [
- {
- "intrinsic": "_bextr_{0.bitwidth}",
- "width": ["0"],
- "llvm": "bextr.{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/bmi2.json b/src/etc/platform-intrinsics/x86/bmi2.json
deleted file mode 100644
index f5a0db5..0000000
--- a/src/etc/platform-intrinsics/x86/bmi2.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "intrinsic_prefix": "_bmi2",
- "llvm_prefix": "llvm.x86.bmi.",
- "intrinsics": [
- {
- "intrinsic": "_bzhi_{0.bitwidth}",
- "width": ["0"],
- "llvm": "bzhi.{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_pdep_{0.bitwidth}",
- "width": ["0"],
- "llvm": "pdep.{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_pext_{0.bitwidth}",
- "width": ["0"],
- "llvm": "pext.{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/fma.json b/src/etc/platform-intrinsics/x86/fma.json
deleted file mode 100644
index dcc26cd..0000000
--- a/src/etc/platform-intrinsics/x86/fma.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.fma.",
- "intrinsics": [
- {
- "intrinsic": "{0.width_mm}_fmadd_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfmadd.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fmaddsub_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfmaddsub.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fmsub_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfmsub.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fmsubadd_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfmsubadd.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fnmadd_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfnmadd.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- },
- {
- "intrinsic": "{0.width_mm}_fnmsub_{0.data_type}",
- "width": [128, 256],
- "llvm": "vfnmsub.{0.data_type_short}{0.width_suffix}",
- "ret": "f(32-64)",
- "args": ["0", "0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/info.json b/src/etc/platform-intrinsics/x86/info.json
deleted file mode 100644
index 8e90b85..0000000
--- a/src/etc/platform-intrinsics/x86/info.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "platform": "x86",
- "number_info": {
- "signed": {
- "kind": "s",
- "kind_short": "",
- "data_type": { "pattern": "epi{bitwidth}" },
- "bitwidth": { "pattern": "{bitwidth}" },
- "data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
- },
- "unsigned": {
- "kind": "u",
- "kind_short": "u",
- "data_type": { "pattern": "epu{bitwidth}" },
- "bitwidth": { "pattern": "{bitwidth}" },
- "data_type_short": { "8": "b", "16": "w", "32": "d", "64": "q" }
- },
- "float": {
- "kind": "f",
- "data_type": { "32": "ps", "64": "pd" },
- "bitwidth": { "pattern": "{bitwidth}" },
- "data_type_short": { "32": "ps", "64": "pd" }
- }
- },
- "width_info": {
- "32": { "width_mm": "32", "width_suffix": "" },
- "64": { "width_mm": "64", "width_suffix": "" },
- "128": { "width_mm": "", "width_suffix": "" },
- "256": { "width_mm": "256", "width_suffix": ".256" },
- "512": { "width_mm": "512", "width_suffix": ".512" }
- }
-}
diff --git a/src/etc/platform-intrinsics/x86/rdrand.json b/src/etc/platform-intrinsics/x86/rdrand.json
deleted file mode 100644
index fa2feb4..0000000
--- a/src/etc/platform-intrinsics/x86/rdrand.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "intrinsic_prefix": "_rdrand",
- "llvm_prefix": "llvm.x86.rdrand.",
- "intrinsics": [
- {
- "intrinsic": "16_step",
- "width": ["0"],
- "llvm": "16",
- "ret": "(U16,S32)",
- "args": []
- },
- {
- "intrinsic": "32_step",
- "width": ["0"],
- "llvm": "32",
- "ret": "(U32,S32)",
- "args": []
- },
- {
- "intrinsic": "64_step",
- "width": ["0"],
- "llvm": "64",
- "ret": "(U64,S32)",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/rdseed.json b/src/etc/platform-intrinsics/x86/rdseed.json
deleted file mode 100644
index 7be64b5..0000000
--- a/src/etc/platform-intrinsics/x86/rdseed.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "intrinsic_prefix": "_rdseed",
- "llvm_prefix": "llvm.x86.rdseed.",
- "intrinsics": [
- {
- "intrinsic": "16_step",
- "width": ["0"],
- "llvm": "16",
- "ret": "(U16,S32)",
- "args": []
- },
- {
- "intrinsic": "32_step",
- "width": ["0"],
- "llvm": "32",
- "ret": "(U32,S32)",
- "args": []
- },
- {
- "intrinsic": "64_step",
- "width": ["0"],
- "llvm": "64",
- "ret": "(U64,S32)",
- "args": []
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse.json b/src/etc/platform-intrinsics/x86/sse.json
deleted file mode 100644
index d8eef8a..0000000
--- a/src/etc/platform-intrinsics/x86/sse.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse.",
- "intrinsics": [
- {
- "intrinsic": "_movemask_ps",
- "width": [128],
- "llvm": "movmsk.ps",
- "ret": "S32",
- "args": ["f32"]
- },
- {
- "intrinsic": "_max_ps",
- "width": [128],
- "llvm": "max.ps",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_min_ps",
- "width": [128],
- "llvm": "min.ps",
- "ret": "f32",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_rsqrt_ps",
- "width": [128],
- "llvm": "rsqrt.ps",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "_rcp_ps",
- "width": [128],
- "llvm": "rcp.ps",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "_sqrt_ps",
- "width": [128],
- "llvm": "!llvm.sqrt.v4f32",
- "ret": "f32",
- "args": ["0"]
- },
- {
- "intrinsic": "_storeu_ps",
- "width": [128],
- "llvm": "storeu.ps",
- "ret": "V",
- "args": ["F32Pm/S8", "f32"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse2.json b/src/etc/platform-intrinsics/x86/sse2.json
deleted file mode 100644
index 4d6317d..0000000
--- a/src/etc/platform-intrinsics/x86/sse2.json
+++ /dev/null
@@ -1,160 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse2.",
- "intrinsics": [
- {
- "intrinsic": "_adds_{0.data_type}",
- "width": [128],
- "llvm": "padd{0.kind_short}s.{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_avg_{0.data_type}",
- "width": [128],
- "llvm": "pavg.{0.data_type_short}",
- "ret": "u(8-16)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_lfence",
- "width": [128],
- "llvm": "lfence",
- "ret": "V",
- "args": []
- },
- {
- "intrinsic": "_madd_epi16",
- "width": [128],
- "llvm": "pmadd.wd",
- "ret": "s32",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "_maskmoveu_si128",
- "width": [128],
- "llvm": "maskmov.dqu",
- "ret": "V",
- "args": ["u8", "u8", "U8Pm"]
- },
- {
- "intrinsic": "_max_{0.data_type}",
- "width": [128],
- "llvm": "pmax{0.kind}.{0.data_type_short}",
- "ret": ["s16", "u8"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_max_pd",
- "width": [128],
- "llvm": "max.pd",
- "ret": "f64",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_mfence",
- "width": [128],
- "llvm": "fence",
- "ret": "V",
- "args": []
- },
- {
- "intrinsic": "_min_{0.data_type}",
- "width": [128],
- "llvm": "pmin{0.kind}.{0.data_type_short}",
- "ret": ["s16", "u8"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_min_pd",
- "width": [128],
- "llvm": "min.pd",
- "ret": "f64",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_movemask_pd",
- "width": [128],
- "llvm": "movmsk.pd",
- "ret": "S32",
- "args": ["f64"]
- },
- {
- "intrinsic": "_movemask_epi8",
- "width": [128],
- "llvm": "pmovmskb.128",
- "ret": "S32",
- "args": ["s8"]
- },
- {
- "intrinsic": "_mul_epu32",
- "width": [128],
- "llvm": "pmulu.dq",
- "ret": "u64",
- "args": ["0dn", "0dn"]
- },
- {
- "intrinsic": "_mulhi_{0.data_type}",
- "width": [128],
- "llvm": "pmulh{0.kind_short}.w",
- "ret": "i16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_packs_{1.data_type}",
- "width": [128],
- "llvm": "packss{1.data_type_short}{0.data_type_short}.128",
- "ret": "s(8-16)",
- "args": ["0hw", "0hw"]
- },
- {
- "intrinsic": "_packus_epi16",
- "width": [128],
- "llvm": "packuswb.128",
- "ret": "u8",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "_sad_epu8",
- "width": [128],
- "llvm": "psad.bw",
- "ret": "u64",
- "args": ["u8", "u8"]
- },
- {
- "intrinsic": "_sfence",
- "width": [128],
- "llvm": "sfence",
- "ret": "V",
- "args": []
- },
- {
- "intrinsic": "_sqrt_pd",
- "width": [128],
- "llvm": "!llvm.sqrt.v2f64",
- "ret": "f64",
- "args": ["0"]
- },
- {
- "intrinsic": "_storeu_pd",
- "width": [128],
- "llvm": "storeu.pd",
- "ret": "V",
- "args": ["F64Pm/U8", "f64"]
- },
- {
- "intrinsic": "_storeu_si128",
- "width": [128],
- "llvm": "storeu.dq",
- "ret": "V",
- "args": ["u8Pm/U8", "u8"]
- },
- {
- "intrinsic": "_subs_{0.data_type}",
- "width": [128],
- "llvm": "psub{0.kind_short}s.{0.data_type_short}",
- "ret": "i(8-16)",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse3.json b/src/etc/platform-intrinsics/x86/sse3.json
deleted file mode 100644
index 119bf20..0000000
--- a/src/etc/platform-intrinsics/x86/sse3.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse3.",
- "intrinsics": [
- {
- "intrinsic": "_addsub_{0.data_type}",
- "width": [128],
- "llvm": "addsub.{0.data_type}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hadd_{0.data_type}",
- "width": [128],
- "llvm": "hadd.{0.data_type}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hsub_{0.data_type}",
- "width": [128],
- "llvm": "hsub.{0.data_type}",
- "ret": "f(32-64)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_lddqu_si128",
- "width": [128],
- "llvm": "ldu.dq",
- "ret": "u8",
- "args": ["0Pc/S8"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse41.json b/src/etc/platform-intrinsics/x86/sse41.json
deleted file mode 100644
index b499637..0000000
--- a/src/etc/platform-intrinsics/x86/sse41.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse41.",
- "intrinsics": [
- {
- "intrinsic": "_dp_{0.data_type}",
- "width": [128],
- "llvm": "dp{0.data_type}",
- "ret": "f(32-64)",
- "args": ["0", "0", "S32/8"]
- },
- {
- "intrinsic": "_max_{0.data_type}",
- "width": [128],
- "llvm": "pmax{0.kind}{0.data_type_short}",
- "ret": ["s8", "u16", "i32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_min_{0.data_type}",
- "width": [128],
- "llvm": "pmin{0.kind}{0.data_type_short}",
- "ret": ["s8", "u16", "i32"],
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_minpos_epu16",
- "width": [128],
- "llvm": "phminposuw",
- "ret": "u16",
- "args": ["0"]
- },
- {
- "intrinsic": "_mpsadbw_epu8",
- "width": [128],
- "llvm": "mpsadbw",
- "ret": "u16",
- "args": ["u8", "u8", "S32/8"]
- },
- {
- "intrinsic": "_mul_epi32",
- "width": [128],
- "llvm": "pmuldq",
- "ret": "s64",
- "args": ["s32", "s32"]
- },
- {
- "intrinsic": "_packus_epi32",
- "width": [128],
- "llvm": "packusdw",
- "ret": "u16",
- "args": ["s32", "s32"]
- },
- {
- "intrinsic": "_testc_si128",
- "width": [128],
- "llvm": "ptestc",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "_testnzc_si128",
- "width": [128],
- "llvm": "ptestnzc",
- "ret": "S32",
- "args": ["u64", "u64"]
- },
- {
- "intrinsic": "_testz_si128",
- "width": [128],
- "llvm": "ptestz",
- "ret": "S32",
- "args": ["u64", "u64"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/sse42.json b/src/etc/platform-intrinsics/x86/sse42.json
deleted file mode 100644
index fdee9c8..0000000
--- a/src/etc/platform-intrinsics/x86/sse42.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.sse42.",
- "intrinsics": [
- {
- "intrinsic": "_cmpestra",
- "width": [128],
- "llvm": "pcmpestria128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestrc",
- "width": [128],
- "llvm": "pcmpestric128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestri",
- "width": [128],
- "llvm": "pcmpestri128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestrm",
- "width": [128],
- "llvm": "pcmpestrm128",
- "ret": "s8",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestro",
- "width": [128],
- "llvm": "pcmpestrio128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestrs",
- "width": [128],
- "llvm": "pcmpestris128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpestrz",
- "width": [128],
- "llvm": "pcmpestriz128",
- "ret": "S32",
- "args": ["s8", "S32", "s8", "S32", "S32/8"]
- },
- {
- "intrinsic": "_cmpistra",
- "width": [128],
- "llvm": "pcmpistria128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistrc",
- "width": [128],
- "llvm": "pcmpistric128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistri",
- "width": [128],
- "llvm": "pcmpistri128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistrm",
- "width": [128],
- "llvm": "pcmpistrm128",
- "ret": "s8",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistro",
- "width": [128],
- "llvm": "pcmpistrio128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistrs",
- "width": [128],
- "llvm": "pcmpistris128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- },
- {
- "intrinsic": "_cmpistrz",
- "width": [128],
- "llvm": "pcmpistriz128",
- "ret": "S32",
- "args": ["s8", "s8", "S32/8"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/ssse3.json b/src/etc/platform-intrinsics/x86/ssse3.json
deleted file mode 100644
index 5a56179..0000000
--- a/src/etc/platform-intrinsics/x86/ssse3.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "intrinsic_prefix": "_mm",
- "llvm_prefix": "llvm.x86.ssse3.",
- "intrinsics": [
- {
- "intrinsic": "_abs_{0.data_type}",
- "width": [128],
- "llvm": "pabs.{0.data_type_short}.128",
- "ret": "s(8-32)",
- "args": ["0"]
- },
- {
- "intrinsic": "_hadd_{0.data_type}",
- "width": [128],
- "llvm": "phadd.{0.data_type_short}.128",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hadds_epi16",
- "width": [128],
- "llvm": "phadd.sw.128",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hsub_{0.data_type}",
- "width": [128],
- "llvm": "phsub.{0.data_type_short}.128",
- "ret": "s(16-32)",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_hsubs_epi16",
- "width": [128],
- "llvm": "phsub.sw.128",
- "ret": "s16",
- "args": ["0", "0"]
- },
- {
- "intrinsic": "_maddubs_epi16",
- "width": [128],
- "llvm": "pmadd.ub.sw.128",
- "ret": "s16",
- "args": ["u8", "s8"]
- },
- {
- "intrinsic": "_mulhrs_epi16",
- "width": [128],
- "llvm": "pmul.hr.sw.128",
- "ret": "s16",
- "args": ["s16", "s16"]
- },
- {
- "intrinsic": "_shuffle_epi8",
- "width": [128],
- "llvm": "pshuf.b.128",
- "ret": "s8",
- "args": ["s8", "s8"]
- },
- {
- "intrinsic": "_sign_{0.data_type}",
- "width": [128],
- "llvm": "psign.{0.data_type_short}.128",
- "ret": "s(8-32)",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/etc/platform-intrinsics/x86/tbm.json b/src/etc/platform-intrinsics/x86/tbm.json
deleted file mode 100644
index d1322cd6..0000000
--- a/src/etc/platform-intrinsics/x86/tbm.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "intrinsic_prefix": "_tbm",
- "llvm_prefix": "llvm.x86.tbm.",
- "intrinsics": [
- {
- "intrinsic": "_bextri_u{0.bitwidth}",
- "width": ["0"],
- "llvm": "bextri.u{0.bitwidth}",
- "ret": "S(32-64)u",
- "args": ["0", "0"]
- }
- ]
-}
diff --git a/src/liballoc/raw_vec.rs b/src/liballoc/raw_vec.rs
index c05452b..5e4aac9 100644
--- a/src/liballoc/raw_vec.rs
+++ b/src/liballoc/raw_vec.rs
@@ -22,7 +22,7 @@
/// * Catches all overflows in capacity computations (promotes them to "capacity overflow" panics)
/// * Guards against 32-bit systems allocating more than isize::MAX bytes
/// * Guards against overflowing your length
-/// * Aborts on OOM
+/// * Aborts on OOM or calls handle_alloc_error as applicable
/// * Avoids freeing Unique::empty()
/// * Contains a ptr::Unique and thus endows the user with all related benefits
///
diff --git a/src/libcore/cmp.rs b/src/libcore/cmp.rs
index 86f28a9..d43a5c1 100644
--- a/src/libcore/cmp.rs
+++ b/src/libcore/cmp.rs
@@ -91,6 +91,8 @@
/// For example, let's tweak our previous code a bit:
///
/// ```
+/// // The derive implements <BookFormat> == <BookFormat> comparisons
+/// #[derive(PartialEq)]
/// enum BookFormat {
/// Paperback,
/// Hardback,
@@ -102,31 +104,34 @@
/// format: BookFormat,
/// }
///
+/// // Implement <Book> == <BookFormat> comparisons
/// impl PartialEq<BookFormat> for Book {
/// fn eq(&self, other: &BookFormat) -> bool {
-/// match (&self.format, other) {
-/// (BookFormat::Paperback, BookFormat::Paperback) => true,
-/// (BookFormat::Hardback, BookFormat::Hardback) => true,
-/// (BookFormat::Ebook, BookFormat::Ebook) => true,
-/// (_, _) => false,
-/// }
+/// self.format == *other
+/// }
+/// }
+///
+/// // Implement <BookFormat> == <Book> comparisons
+/// impl PartialEq<Book> for BookFormat {
+/// fn eq(&self, other: &Book) -> bool {
+/// *self == other.format
/// }
/// }
///
/// let b1 = Book { isbn: 3, format: BookFormat::Paperback };
///
/// assert!(b1 == BookFormat::Paperback);
-/// assert!(b1 != BookFormat::Ebook);
+/// assert!(BookFormat::Ebook != b1);
/// ```
///
/// By changing `impl PartialEq for Book` to `impl PartialEq<BookFormat> for Book`,
-/// we've changed what type we can use on the right side of the `==` operator.
-/// This lets us use it in the `assert!` statements at the bottom.
+/// we allow `BookFormat`s to be compared with `Book`s.
///
/// You can also combine these implementations to let the `==` operator work with
/// two different types:
///
/// ```
+/// #[derive(PartialEq)]
/// enum BookFormat {
/// Paperback,
/// Hardback,
@@ -140,12 +145,13 @@
///
/// impl PartialEq<BookFormat> for Book {
/// fn eq(&self, other: &BookFormat) -> bool {
-/// match (&self.format, other) {
-/// (&BookFormat::Paperback, &BookFormat::Paperback) => true,
-/// (&BookFormat::Hardback, &BookFormat::Hardback) => true,
-/// (&BookFormat::Ebook, &BookFormat::Ebook) => true,
-/// (_, _) => false,
-/// }
+/// self.format == *other
+/// }
+/// }
+///
+/// impl PartialEq<Book> for BookFormat {
+/// fn eq(&self, other: &Book) -> bool {
+/// *self == other.format
/// }
/// }
///
@@ -159,7 +165,7 @@
/// let b2 = Book { isbn: 3, format: BookFormat::Ebook };
///
/// assert!(b1 == BookFormat::Paperback);
-/// assert!(b1 != BookFormat::Ebook);
+/// assert!(BookFormat::Ebook != b1);
/// assert!(b1 == b2);
/// ```
///
diff --git a/src/libcore/ffi.rs b/src/libcore/ffi.rs
index 0717a88..644380c 100644
--- a/src/libcore/ffi.rs
+++ b/src/libcore/ffi.rs
@@ -12,24 +12,27 @@
/// and `*mut c_void` is equivalent to C's `void*`. That said, this is
/// *not* the same as C's `void` return type, which is Rust's `()` type.
///
-/// Ideally, this type would be equivalent to [`!`], but currently it may
-/// be more ideal to use `c_void` for FFI purposes.
+/// To model pointers to opaque types in FFI, until `extern type` is
+/// stabilized, it is recommended to use a newtype wrapper around an empty
+/// byte array. See the [Nomicon] for details.
///
-/// [`!`]: ../../std/primitive.never.html
/// [pointer]: ../../std/primitive.pointer.html
+/// [Nomicon]: https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs
// N.B., for LLVM to recognize the void pointer type and by extension
// functions like malloc(), we need to have it represented as i8* in
// LLVM bitcode. The enum used here ensures this and prevents misuse
-// of the "raw" type by only having private variants.. We need two
+// of the "raw" type by only having private variants. We need two
// variants, because the compiler complains about the repr attribute
-// otherwise.
+// otherwise and we need at least one variant as otherwise the enum
+// would be uninhabited and at least dereferencing such pointers would
+// be UB.
#[repr(u8)]
#[stable(feature = "raw_os", since = "1.1.0")]
pub enum c_void {
- #[unstable(feature = "c_void_variant", reason = "should not have to exist",
+ #[unstable(feature = "c_void_variant", reason = "temporary implementation detail",
issue = "0")]
#[doc(hidden)] __variant1,
- #[unstable(feature = "c_void_variant", reason = "should not have to exist",
+ #[unstable(feature = "c_void_variant", reason = "temporary implementation detail",
issue = "0")]
#[doc(hidden)] __variant2,
}
@@ -49,7 +52,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
extern {
type VaListImpl;
}
@@ -74,7 +77,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
struct VaListImpl {
stack: *mut (),
gr_top: *mut (),
@@ -90,7 +93,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
struct VaListImpl {
gpr: u8,
fpr: u8,
@@ -106,7 +109,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
struct VaListImpl {
gp_offset: i32,
fp_offset: i32,
@@ -120,7 +123,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
#[repr(transparent)]
pub struct VaList<'a>(&'a mut VaListImpl);
@@ -140,7 +143,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
pub trait VaArgSafe {}
}
@@ -150,7 +153,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
impl sealed_trait::VaArgSafe for $t {}
)+
}
@@ -163,12 +166,12 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
impl<T> sealed_trait::VaArgSafe for *mut T {}
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
impl<T> sealed_trait::VaArgSafe for *const T {}
impl<'a> VaList<'a> {
@@ -176,7 +179,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
pub unsafe fn arg<T: sealed_trait::VaArgSafe>(&mut self) -> T {
va_arg(self)
}
@@ -185,7 +188,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
pub unsafe fn copy<F, R>(&self, f: F) -> R
where F: for<'copy> FnOnce(VaList<'copy>) -> R {
#[cfg(any(all(not(target_arch = "aarch64"), not(target_arch = "powerpc"),
diff --git a/src/libcore/hint.rs b/src/libcore/hint.rs
index 9e57a4e..ad5a207 100644
--- a/src/libcore/hint.rs
+++ b/src/libcore/hint.rs
@@ -49,3 +49,26 @@
pub unsafe fn unreachable_unchecked() -> ! {
intrinsics::unreachable()
}
+
+/// Save power or switch hyperthreads in a busy-wait spin-loop.
+///
+/// This function is deliberately more primitive than
+/// [`std::thread::yield_now`](../../std/thread/fn.yield_now.html) and
+/// does not directly yield to the system's scheduler.
+/// In some cases it might be useful to use a combination of both functions.
+/// Careful benchmarking is advised.
+///
+/// On some platforms this function may not do anything at all.
+#[inline]
+#[unstable(feature = "renamed_spin_loop", issue = "55002")]
+pub fn spin_loop() {
+ #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
+ unsafe {
+ asm!("pause" ::: "memory" : "volatile");
+ }
+
+ #[cfg(target_arch = "aarch64")]
+ unsafe {
+ asm!("yield" ::: "memory" : "volatile");
+ }
+}
diff --git a/src/libcore/iter/iterator.rs b/src/libcore/iter/iterator.rs
index 640af74..0ad29af 100644
--- a/src/libcore/iter/iterator.rs
+++ b/src/libcore/iter/iterator.rs
@@ -2358,7 +2358,7 @@
///
/// ```
/// fn factorial(n: u32) -> u32 {
- /// (1..).take_while(|&i| i <= n).product()
+ /// (1..=n).product()
/// }
/// assert_eq!(factorial(0), 1);
/// assert_eq!(factorial(1), 1);
diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs
index 1ef5428..974906b 100644
--- a/src/libcore/iter/mod.rs
+++ b/src/libcore/iter/mod.rs
@@ -329,6 +329,8 @@
pub use self::sources::{Empty, empty};
#[stable(feature = "iter_once", since = "1.2.0")]
pub use self::sources::{Once, once};
+#[unstable(feature = "iter_once_with", issue = "57581")]
+pub use self::sources::{OnceWith, once_with};
#[unstable(feature = "iter_unfold", issue = "55977")]
pub use self::sources::{Unfold, unfold, Successors, successors};
diff --git a/src/libcore/iter/sources.rs b/src/libcore/iter/sources.rs
index 2a39089..2590fa6 100644
--- a/src/libcore/iter/sources.rs
+++ b/src/libcore/iter/sources.rs
@@ -377,6 +377,119 @@
Once { inner: Some(value).into_iter() }
}
+/// An iterator that repeats elements of type `A` endlessly by
+/// applying the provided closure `F: FnMut() -> A`.
+///
+/// This `struct` is created by the [`once_with`] function.
+/// See its documentation for more.
+///
+/// [`once_with`]: fn.once_with.html
+#[derive(Copy, Clone, Debug)]
+#[unstable(feature = "iter_once_with", issue = "57581")]
+pub struct OnceWith<F> {
+ gen: Option<F>,
+}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+impl<A, F: FnOnce() -> A> Iterator for OnceWith<F> {
+ type Item = A;
+
+ #[inline]
+ fn next(&mut self) -> Option<A> {
+ self.gen.take().map(|f| f())
+ }
+
+ #[inline]
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ self.gen.iter().size_hint()
+ }
+}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+impl<A, F: FnOnce() -> A> DoubleEndedIterator for OnceWith<F> {
+ fn next_back(&mut self) -> Option<A> {
+ self.next()
+ }
+}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+impl<A, F: FnOnce() -> A> ExactSizeIterator for OnceWith<F> {
+ fn len(&self) -> usize {
+ self.gen.iter().len()
+ }
+}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+impl<A, F: FnOnce() -> A> FusedIterator for OnceWith<F> {}
+
+#[unstable(feature = "iter_once_with", issue = "57581")]
+unsafe impl<A, F: FnOnce() -> A> TrustedLen for OnceWith<F> {}
+
+/// Creates an iterator that lazily generates a value exactly once by invoking
+/// the provided closure.
+///
+/// This is commonly used to adapt a single value generator into a [`chain`] of
+/// other kinds of iteration. Maybe you have an iterator that covers almost
+/// everything, but you need an extra special case. Maybe you have a function
+/// which works on iterators, but you only need to process one value.
+///
+/// Unlike [`once`], this function will lazily generate the value on request.
+///
+/// [`once`]: fn.once.html
+/// [`chain`]: trait.Iterator.html#method.chain
+///
+/// # Examples
+///
+/// Basic usage:
+///
+/// ```
+/// #![feature(iter_once_with)]
+///
+/// use std::iter;
+///
+/// // one is the loneliest number
+/// let mut one = iter::once_with(|| 1);
+///
+/// assert_eq!(Some(1), one.next());
+///
+/// // just one, that's all we get
+/// assert_eq!(None, one.next());
+/// ```
+///
+/// Chaining together with another iterator. Let's say that we want to iterate
+/// over each file of the `.foo` directory, but also a configuration file,
+/// `.foorc`:
+///
+/// ```no_run
+/// #![feature(iter_once_with)]
+///
+/// use std::iter;
+/// use std::fs;
+/// use std::path::PathBuf;
+///
+/// let dirs = fs::read_dir(".foo").unwrap();
+///
+/// // we need to convert from an iterator of DirEntry-s to an iterator of
+/// // PathBufs, so we use map
+/// let dirs = dirs.map(|file| file.unwrap().path());
+///
+/// // now, our iterator just for our config file
+/// let config = iter::once_with(|| PathBuf::from(".foorc"));
+///
+/// // chain the two iterators together into one big iterator
+/// let files = dirs.chain(config);
+///
+/// // this will give us all of the files in .foo as well as .foorc
+/// for f in files {
+/// println!("{:?}", f);
+/// }
+/// ```
+#[inline]
+#[unstable(feature = "iter_once_with", issue = "57581")]
+pub fn once_with<A, F: FnOnce() -> A>(gen: F) -> OnceWith<F> {
+ OnceWith { gen: Some(gen) }
+}
+
/// Creates a new iterator where each iteration calls the provided closure
/// `F: FnMut(&mut St) -> Option<T>`.
///
diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs
index 8879112..33c0da8 100644
--- a/src/libcore/lib.rs
+++ b/src/libcore/lib.rs
@@ -79,6 +79,7 @@
#![feature(extern_types)]
#![feature(fundamental)]
#![feature(intrinsics)]
+#![feature(iter_once_with)]
#![feature(lang_items)]
#![feature(link_llvm_intrinsics)]
#![feature(never_type)]
diff --git a/src/libcore/ops/index.rs b/src/libcore/ops/index.rs
index 4f55c68..6cfa367 100644
--- a/src/libcore/ops/index.rs
+++ b/src/libcore/ops/index.rs
@@ -51,6 +51,21 @@
/// ```
#[lang = "index"]
#[rustc_on_unimplemented(
+ on(
+ _Self="&str",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
+ on(
+ _Self="str",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
+ on(
+ _Self="std::string::String",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
message="the type `{Self}` cannot be indexed by `{Idx}`",
label="`{Self}` cannot be indexed by `{Idx}`",
)]
@@ -141,6 +156,21 @@
/// ```
#[lang = "index_mut"]
#[rustc_on_unimplemented(
+ on(
+ _Self="&str",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
+ on(
+ _Self="str",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
+ on(
+ _Self="std::string::String",
+ note="you can use `.chars().nth()` or `.bytes().nth()`
+see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>"
+ ),
message="the type `{Self}` cannot be mutably indexed by `{Idx}`",
label="`{Self}` cannot be mutably indexed by `{Idx}`",
)]
diff --git a/src/libcore/pin.rs b/src/libcore/pin.rs
index 762e075..7c09a36 100644
--- a/src/libcore/pin.rs
+++ b/src/libcore/pin.rs
@@ -99,6 +99,7 @@
use fmt;
use marker::{Sized, Unpin};
+use cmp::{self, PartialEq, PartialOrd};
use ops::{Deref, DerefMut, Receiver, CoerceUnsized, DispatchFromDyn};
/// A pinned pointer.
@@ -112,16 +113,57 @@
/// [`Unpin`]: ../../std/marker/trait.Unpin.html
/// [`pin` module]: ../../std/pin/index.html
//
-// Note: the derives below are allowed because they all only use `&P`, so they
-// cannot move the value behind `pointer`.
+// Note: the derives below, and the explicit `PartialEq` and `PartialOrd`
+// implementations, are allowed because they all only use `&P`, so they cannot move
+// the value behind `pointer`.
#[stable(feature = "pin", since = "1.33.0")]
#[fundamental]
#[repr(transparent)]
-#[derive(Copy, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
+#[derive(Copy, Clone, Hash, Eq, Ord)]
pub struct Pin<P> {
pointer: P,
}
+#[stable(feature = "pin_partialeq_partialord_impl_applicability", since = "1.34.0")]
+impl<P, Q> PartialEq<Pin<Q>> for Pin<P>
+where
+ P: PartialEq<Q>,
+{
+ fn eq(&self, other: &Pin<Q>) -> bool {
+ self.pointer == other.pointer
+ }
+
+ fn ne(&self, other: &Pin<Q>) -> bool {
+ self.pointer != other.pointer
+ }
+}
+
+#[stable(feature = "pin_partialeq_partialord_impl_applicability", since = "1.34.0")]
+impl<P, Q> PartialOrd<Pin<Q>> for Pin<P>
+where
+ P: PartialOrd<Q>,
+{
+ fn partial_cmp(&self, other: &Pin<Q>) -> Option<cmp::Ordering> {
+ self.pointer.partial_cmp(&other.pointer)
+ }
+
+ fn lt(&self, other: &Pin<Q>) -> bool {
+ self.pointer < other.pointer
+ }
+
+ fn le(&self, other: &Pin<Q>) -> bool {
+ self.pointer <= other.pointer
+ }
+
+ fn gt(&self, other: &Pin<Q>) -> bool {
+ self.pointer > other.pointer
+ }
+
+ fn ge(&self, other: &Pin<Q>) -> bool {
+ self.pointer >= other.pointer
+ }
+}
+
impl<P: Deref> Pin<P>
where
P::Target: Unpin,
diff --git a/src/libcore/slice/memchr.rs b/src/libcore/slice/memchr.rs
index 0f1bc41..312838a 100644
--- a/src/libcore/slice/memchr.rs
+++ b/src/libcore/slice/memchr.rs
@@ -1,5 +1,4 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
use cmp;
@@ -8,13 +7,13 @@
const LO_U64: u64 = 0x0101010101010101;
const HI_U64: u64 = 0x8080808080808080;
-// use truncation
+// Use truncation.
const LO_USIZE: usize = LO_U64 as usize;
const HI_USIZE: usize = HI_U64 as usize;
-/// Return `true` if `x` contains any zero byte.
+/// Returns whether `x` contains any zero byte.
///
-/// From *Matters Computational*, J. Arndt
+/// From *Matters Computational*, J. Arndt:
///
/// "The idea is to subtract one from each of the bytes and then look for
/// bytes where the borrow propagated all the way to the most significant
@@ -36,7 +35,7 @@
(b as usize) * (::usize::MAX / 255)
}
-/// Return the first index matching the byte `x` in `text`.
+/// Returns the first index matching the byte `x` in `text`.
pub fn memchr(x: u8, text: &[u8]) -> Option<usize> {
// Scan for a single byte value by reading two `usize` words at a time.
//
@@ -77,18 +76,18 @@
}
}
- // find the byte after the point the body loop stopped
+ // Find the byte after the point the body loop stopped.
text[offset..].iter().position(|elt| *elt == x).map(|i| offset + i)
}
-/// Return the last index matching the byte `x` in `text`.
+/// Returns the last index matching the byte `x` in `text`.
pub fn memrchr(x: u8, text: &[u8]) -> Option<usize> {
// Scan for a single byte value by reading two `usize` words at a time.
//
- // Split `text` in three parts
- // - unaligned tail, after the last word aligned address in text
- // - body, scan by 2 words at a time
- // - the first remaining bytes, < 2 word size
+ // Split `text` in three parts:
+ // - unaligned tail, after the last word aligned address in text,
+ // - body, scanned by 2 words at a time,
+ // - the first remaining bytes, < 2 word size.
let len = text.len();
let ptr = text.as_ptr();
type Chunk = usize;
@@ -105,7 +104,7 @@
return Some(offset + index);
}
- // search the body of the text, make sure we don't cross min_aligned_offset.
+ // Search the body of the text, make sure we don't cross min_aligned_offset.
// offset is always aligned, so just testing `>` is sufficient and avoids possible
// overflow.
let repeated_x = repeat_byte(x);
@@ -116,7 +115,7 @@
let u = *(ptr.offset(offset as isize - 2 * chunk_bytes as isize) as *const Chunk);
let v = *(ptr.offset(offset as isize - chunk_bytes as isize) as *const Chunk);
- // break if there is a matching byte
+ // Break if there is a matching byte.
let zu = contains_zero_byte(u ^ repeated_x);
let zv = contains_zero_byte(v ^ repeated_x);
if zu || zv {
@@ -126,6 +125,6 @@
offset -= 2 * chunk_bytes;
}
- // find the byte before the point the body loop stopped
+ // Find the byte before the point the body loop stopped.
text[..offset].iter().rposition(|elt| *elt == x)
}
diff --git a/src/libcore/sync/atomic.rs b/src/libcore/sync/atomic.rs
index 99e6365..8992e51 100644
--- a/src/libcore/sync/atomic.rs
+++ b/src/libcore/sync/atomic.rs
@@ -84,6 +84,8 @@
use cell::UnsafeCell;
use fmt;
+use hint::spin_loop;
+
/// Save power or switch hyperthreads in a busy-wait spin-loop.
///
/// This function is deliberately more primitive than
@@ -96,15 +98,7 @@
#[inline]
#[stable(feature = "spin_loop_hint", since = "1.24.0")]
pub fn spin_loop_hint() {
- #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
- unsafe {
- asm!("pause" ::: "memory" : "volatile");
- }
-
- #[cfg(target_arch = "aarch64")]
- unsafe {
- asm!("yield" ::: "memory" : "volatile");
- }
+ spin_loop()
}
/// A boolean type which can be safely shared between threads.
diff --git a/src/libcore/tests/iter.rs b/src/libcore/tests/iter.rs
index cf19851..3944bc7 100644
--- a/src/libcore/tests/iter.rs
+++ b/src/libcore/tests/iter.rs
@@ -1,3 +1,4 @@
+use core::cell::Cell;
use core::iter::*;
use core::{i8, i16, isize};
use core::usize;
@@ -1907,6 +1908,23 @@
}
#[test]
+fn test_once_with() {
+ let count = Cell::new(0);
+ let mut it = once_with(|| {
+ count.set(count.get() + 1);
+ 42
+ });
+
+ assert_eq!(count.get(), 0);
+ assert_eq!(it.next(), Some(42));
+ assert_eq!(count.get(), 1);
+ assert_eq!(it.next(), None);
+ assert_eq!(count.get(), 1);
+ assert_eq!(it.next(), None);
+ assert_eq!(count.get(), 1);
+}
+
+#[test]
fn test_empty() {
let mut it = empty::<i32>();
assert_eq!(it.next(), None);
diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs
index 72846da..a9b8dec 100644
--- a/src/libcore/tests/lib.rs
+++ b/src/libcore/tests/lib.rs
@@ -12,6 +12,7 @@
#![feature(hashmap_internals)]
#![feature(iter_copied)]
#![feature(iter_nth_back)]
+#![feature(iter_once_with)]
#![feature(iter_unfold)]
#![feature(pattern)]
#![feature(range_is_empty)]
diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs
index 427fe51..4cfebaa 100644
--- a/src/librustc/dep_graph/dep_node.rs
+++ b/src/librustc/dep_graph/dep_node.rs
@@ -476,6 +476,9 @@
[] CheckModLoops(DefId),
[] CheckModUnstableApiUsage(DefId),
[] CheckModItemTypes(DefId),
+ [] CheckModPrivacy(DefId),
+ [] CheckModIntrinsics(DefId),
+ [] CheckModLiveness(DefId),
[] CollectModItemTypes(DefId),
[] Reachability,
@@ -583,6 +586,7 @@
[] CheckImplItemWellFormed(DefId),
[] ReachableNonGenerics(CrateNum),
[] NativeLibraries(CrateNum),
+ [] EntryFn(CrateNum),
[] PluginRegistrarFn(CrateNum),
[] ProcMacroDeclsStatic(CrateNum),
[input] CrateDisambiguator(CrateNum),
@@ -630,6 +634,7 @@
[input] Freevars(DefId),
[input] MaybeUnusedTraitImport(DefId),
[input] MaybeUnusedExternCrates,
+ [input] NamesImportedByGlobUse(DefId),
[eval_always] StabilityIndex,
[eval_always] AllTraits,
[input] AllCrateNums,
diff --git a/src/librustc/dep_graph/graph.rs b/src/librustc/dep_graph/graph.rs
index 501ef01..a9e80dd 100644
--- a/src/librustc/dep_graph/graph.rs
+++ b/src/librustc/dep_graph/graph.rs
@@ -3,7 +3,7 @@
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
use smallvec::SmallVec;
-use rustc_data_structures::sync::{Lrc, Lock};
+use rustc_data_structures::sync::{Lrc, Lock, AtomicU32, Ordering};
use std::env;
use std::hash::Hash;
use std::collections::hash_map::Entry;
@@ -58,7 +58,7 @@
/// nodes and edges as well as all fingerprints of nodes that have them.
previous: PreviousDepGraph,
- colors: Lock<DepNodeColorMap>,
+ colors: DepNodeColorMap,
/// When we load, there may be `.o` files, cached mir, or other such
/// things available to us. If we find that they are not dirty, we
@@ -84,7 +84,7 @@
dep_node_debug: Default::default(),
current: Lock::new(CurrentDepGraph::new(prev_graph_node_count)),
previous: prev_graph,
- colors: Lock::new(DepNodeColorMap::new(prev_graph_node_count)),
+ colors: DepNodeColorMap::new(prev_graph_node_count),
loaded_from_cache: Default::default(),
})),
}
@@ -282,12 +282,11 @@
DepNodeColor::Red
};
- let mut colors = data.colors.borrow_mut();
- debug_assert!(colors.get(prev_index).is_none(),
+ debug_assert!(data.colors.get(prev_index).is_none(),
"DepGraph::with_task() - Duplicate DepNodeColor \
insertion for {:?}", key);
- colors.insert(prev_index, color);
+ data.colors.insert(prev_index, color);
}
(result, dep_node_index)
@@ -502,7 +501,7 @@
pub fn node_color(&self, dep_node: &DepNode) -> Option<DepNodeColor> {
if let Some(ref data) = self.data {
if let Some(prev_index) = data.previous.node_to_index_opt(dep_node) {
- return data.colors.borrow().get(prev_index)
+ return data.colors.get(prev_index)
} else {
// This is a node that did not exist in the previous compilation
// session, so we consider it to be red.
@@ -513,56 +512,89 @@
None
}
- pub fn try_mark_green<'tcx>(&self,
- tcx: TyCtxt<'_, 'tcx, 'tcx>,
- dep_node: &DepNode)
- -> Option<DepNodeIndex> {
- debug!("try_mark_green({:?}) - BEGIN", dep_node);
- let data = self.data.as_ref().unwrap();
+ /// Try to read a node index for the node dep_node.
+ /// A node will have an index, when it's already been marked green, or when we can mark it
+ /// green. This function will mark the current task as a reader of the specified node, when
+ /// a node index can be found for that node.
+ pub fn try_mark_green_and_read(
+ &self,
+ tcx: TyCtxt<'_, '_, '_>,
+ dep_node: &DepNode
+ ) -> Option<(SerializedDepNodeIndex, DepNodeIndex)> {
+ self.try_mark_green(tcx, dep_node).map(|(prev_index, dep_node_index)| {
+ debug_assert!(self.is_green(&dep_node));
+ self.read_index(dep_node_index);
+ (prev_index, dep_node_index)
+ })
+ }
- #[cfg(not(parallel_queries))]
- debug_assert!(!data.current.borrow().node_to_node_index.contains_key(dep_node));
+ pub fn try_mark_green(
+ &self,
+ tcx: TyCtxt<'_, '_, '_>,
+ dep_node: &DepNode
+ ) -> Option<(SerializedDepNodeIndex, DepNodeIndex)> {
+ debug_assert!(!dep_node.kind.is_input());
- if dep_node.kind.is_input() {
- // We should only hit try_mark_green() for inputs that do not exist
- // anymore in the current compilation session. Existing inputs are
- // eagerly marked as either red/green before any queries are
- // executed.
- debug_assert!(dep_node.extract_def_id(tcx).is_none());
- debug!("try_mark_green({:?}) - END - DepNode is deleted input", dep_node);
- return None;
- }
+ // Return None if the dep graph is disabled
+ let data = self.data.as_ref()?;
- let (prev_deps, prev_dep_node_index) = match data.previous.edges_from(dep_node) {
- Some(prev) => {
+ // Return None if the dep node didn't exist in the previous session
+ let prev_index = data.previous.node_to_index_opt(dep_node)?;
+
+ match data.colors.get(prev_index) {
+ Some(DepNodeColor::Green(dep_node_index)) => Some((prev_index, dep_node_index)),
+ Some(DepNodeColor::Red) => None,
+ None => {
// This DepNode and the corresponding query invocation existed
// in the previous compilation session too, so we can try to
// mark it as green by recursively marking all of its
// dependencies green.
- prev
+ self.try_mark_previous_green(
+ tcx.global_tcx(),
+ data,
+ prev_index,
+ &dep_node
+ ).map(|dep_node_index| {
+ (prev_index, dep_node_index)
+ })
}
- None => {
- // This DepNode did not exist in the previous compilation session,
- // so we cannot mark it as green.
- debug!("try_mark_green({:?}) - END - DepNode does not exist in \
- current compilation session anymore", dep_node);
- return None
- }
- };
+ }
+ }
- debug_assert!(data.colors.borrow().get(prev_dep_node_index).is_none());
+ /// Try to mark a dep-node which existed in the previous compilation session as green
+ fn try_mark_previous_green<'tcx>(
+ &self,
+ tcx: TyCtxt<'_, 'tcx, 'tcx>,
+ data: &DepGraphData,
+ prev_dep_node_index: SerializedDepNodeIndex,
+ dep_node: &DepNode
+ ) -> Option<DepNodeIndex> {
+ debug!("try_mark_previous_green({:?}) - BEGIN", dep_node);
+
+ #[cfg(not(parallel_queries))]
+ {
+ debug_assert!(!data.current.borrow().node_to_node_index.contains_key(dep_node));
+ debug_assert!(data.colors.get(prev_dep_node_index).is_none());
+ }
+
+ // We never try to mark inputs as green
+ debug_assert!(!dep_node.kind.is_input());
+
+ debug_assert_eq!(data.previous.index_to_node(prev_dep_node_index), *dep_node);
+
+ let prev_deps = data.previous.edge_targets_from(prev_dep_node_index);
let mut current_deps = SmallVec::new();
for &dep_dep_node_index in prev_deps {
- let dep_dep_node_color = data.colors.borrow().get(dep_dep_node_index);
+ let dep_dep_node_color = data.colors.get(dep_dep_node_index);
match dep_dep_node_color {
Some(DepNodeColor::Green(node_index)) => {
// This dependency has been marked as green before, we are
// still fine and can continue with checking the other
// dependencies.
- debug!("try_mark_green({:?}) --- found dependency {:?} to \
+ debug!("try_mark_previous_green({:?}) --- found dependency {:?} to \
be immediately green",
dep_node,
data.previous.index_to_node(dep_dep_node_index));
@@ -573,7 +605,7 @@
// compared to the previous compilation session. We cannot
// mark the DepNode as green and also don't need to bother
// with checking any of the other dependencies.
- debug!("try_mark_green({:?}) - END - dependency {:?} was \
+ debug!("try_mark_previous_green({:?}) - END - dependency {:?} was \
immediately red",
dep_node,
data.previous.index_to_node(dep_dep_node_index));
@@ -585,12 +617,18 @@
// We don't know the state of this dependency. If it isn't
// an input node, let's try to mark it green recursively.
if !dep_dep_node.kind.is_input() {
- debug!("try_mark_green({:?}) --- state of dependency {:?} \
+ debug!("try_mark_previous_green({:?}) --- state of dependency {:?} \
is unknown, trying to mark it green", dep_node,
dep_dep_node);
- if let Some(node_index) = self.try_mark_green(tcx, dep_dep_node) {
- debug!("try_mark_green({:?}) --- managed to MARK \
+ let node_index = self.try_mark_previous_green(
+ tcx,
+ data,
+ dep_dep_node_index,
+ dep_dep_node
+ );
+ if let Some(node_index) = node_index {
+ debug!("try_mark_previous_green({:?}) --- managed to MARK \
dependency {:?} as green", dep_node, dep_dep_node);
current_deps.push(node_index);
continue;
@@ -600,7 +638,7 @@
DepKind::Hir |
DepKind::HirBody |
DepKind::CrateMetadata => {
- if dep_node.extract_def_id(tcx).is_none() {
+ if dep_dep_node.extract_def_id(tcx).is_none() {
// If the node does not exist anymore, we
// just fail to mark green.
return None
@@ -620,20 +658,20 @@
}
// We failed to mark it green, so we try to force the query.
- debug!("try_mark_green({:?}) --- trying to force \
+ debug!("try_mark_previous_green({:?}) --- trying to force \
dependency {:?}", dep_node, dep_dep_node);
if ::ty::query::force_from_dep_node(tcx, dep_dep_node) {
- let dep_dep_node_color = data.colors.borrow().get(dep_dep_node_index);
+ let dep_dep_node_color = data.colors.get(dep_dep_node_index);
match dep_dep_node_color {
Some(DepNodeColor::Green(node_index)) => {
- debug!("try_mark_green({:?}) --- managed to \
+ debug!("try_mark_previous_green({:?}) --- managed to \
FORCE dependency {:?} to green",
dep_node, dep_dep_node);
current_deps.push(node_index);
}
Some(DepNodeColor::Red) => {
- debug!("try_mark_green({:?}) - END - \
+ debug!("try_mark_previous_green({:?}) - END - \
dependency {:?} was red after forcing",
dep_node,
dep_dep_node);
@@ -641,7 +679,7 @@
}
None => {
if !tcx.sess.has_errors() {
- bug!("try_mark_green() - Forcing the DepNode \
+ bug!("try_mark_previous_green() - Forcing the DepNode \
should have set its color")
} else {
// If the query we just forced has resulted
@@ -653,7 +691,7 @@
}
} else {
// The DepNode could not be forced.
- debug!("try_mark_green({:?}) - END - dependency {:?} \
+ debug!("try_mark_previous_green({:?}) - END - dependency {:?} \
could not be forced", dep_node, dep_dep_node);
return None
}
@@ -705,16 +743,15 @@
}
// ... and finally storing a "Green" entry in the color map.
- let mut colors = data.colors.borrow_mut();
// Multiple threads can all write the same color here
#[cfg(not(parallel_queries))]
- debug_assert!(colors.get(prev_dep_node_index).is_none(),
- "DepGraph::try_mark_green() - Duplicate DepNodeColor \
+ debug_assert!(data.colors.get(prev_dep_node_index).is_none(),
+ "DepGraph::try_mark_previous_green() - Duplicate DepNodeColor \
insertion for {:?}", dep_node);
- colors.insert(prev_dep_node_index, DepNodeColor::Green(dep_node_index));
+ data.colors.insert(prev_dep_node_index, DepNodeColor::Green(dep_node_index));
- debug!("try_mark_green({:?}) - END - successfully marked as green", dep_node);
+ debug!("try_mark_previous_green({:?}) - END - successfully marked as green", dep_node);
Some(dep_node_index)
}
@@ -735,9 +772,8 @@
pub fn exec_cache_promotions<'a, 'tcx>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>) {
let green_nodes: Vec<DepNode> = {
let data = self.data.as_ref().unwrap();
- let colors = data.colors.borrow();
- colors.values.indices().filter_map(|prev_index| {
- match colors.get(prev_index) {
+ data.colors.values.indices().filter_map(|prev_index| {
+ match data.colors.get(prev_index) {
Some(DepNodeColor::Green(_)) => {
let dep_node = data.previous.index_to_node(prev_index);
if dep_node.cache_on_disk(tcx) {
@@ -1035,7 +1071,7 @@
// A data structure that stores Option<DepNodeColor> values as a contiguous
// array, using one u32 per entry.
struct DepNodeColorMap {
- values: IndexVec<SerializedDepNodeIndex, u32>,
+ values: IndexVec<SerializedDepNodeIndex, AtomicU32>,
}
const COMPRESSED_NONE: u32 = 0;
@@ -1045,12 +1081,12 @@
impl DepNodeColorMap {
fn new(size: usize) -> DepNodeColorMap {
DepNodeColorMap {
- values: IndexVec::from_elem_n(COMPRESSED_NONE, size)
+ values: (0..size).map(|_| AtomicU32::new(COMPRESSED_NONE)).collect(),
}
}
fn get(&self, index: SerializedDepNodeIndex) -> Option<DepNodeColor> {
- match self.values[index] {
+ match self.values[index].load(Ordering::Acquire) {
COMPRESSED_NONE => None,
COMPRESSED_RED => Some(DepNodeColor::Red),
value => Some(DepNodeColor::Green(DepNodeIndex::from_u32(
@@ -1059,10 +1095,10 @@
}
}
- fn insert(&mut self, index: SerializedDepNodeIndex, color: DepNodeColor) {
- self.values[index] = match color {
+ fn insert(&self, index: SerializedDepNodeIndex, color: DepNodeColor) {
+ self.values[index].store(match color {
DepNodeColor::Red => COMPRESSED_RED,
DepNodeColor::Green(index) => index.as_u32() + COMPRESSED_FIRST_GREEN,
- }
+ }, Ordering::Release)
}
}
diff --git a/src/librustc/dep_graph/prev.rs b/src/librustc/dep_graph/prev.rs
index 76d2954..ea5350a 100644
--- a/src/librustc/dep_graph/prev.rs
+++ b/src/librustc/dep_graph/prev.rs
@@ -19,14 +19,11 @@
}
#[inline]
- pub fn edges_from(&self,
- dep_node: &DepNode)
- -> Option<(&[SerializedDepNodeIndex], SerializedDepNodeIndex)> {
- self.index
- .get(dep_node)
- .map(|&node_index| {
- (self.data.edge_targets_from(node_index), node_index)
- })
+ pub fn edge_targets_from(
+ &self,
+ dep_node_index: SerializedDepNodeIndex
+ ) -> &[SerializedDepNodeIndex] {
+ self.data.edge_targets_from(dep_node_index)
}
#[inline]
diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs
index 4bc52e8..287a45a 100644
--- a/src/librustc/diagnostics.rs
+++ b/src/librustc/diagnostics.rs
@@ -1180,27 +1180,6 @@
```
"##,
-E0296: r##"
-This error indicates that the given recursion limit could not be parsed. Ensure
-that the value provided is a positive integer between quotes.
-
-Erroneous code example:
-
-```compile_fail,E0296
-#![recursion_limit]
-
-fn main() {}
-```
-
-And a working example:
-
-```
-#![recursion_limit="1000"]
-
-fn main() {}
-```
-"##,
-
E0308: r##"
This error occurs when the compiler was unable to infer the concrete type of a
variable. It can occur for several cases, the most common of which is a
@@ -2093,20 +2072,6 @@
```
"##,
-E0702: r##"
-This error indicates that a `#[non_exhaustive]` attribute had a value. The
-`#[non_exhaustive]` should be empty.
-
-Examples of erroneous code:
-
-```compile_fail,E0702
-# #![feature(non_exhaustive)]
-
-#[non_exhaustive(anything)]
-struct Foo;
-```
-"##,
-
E0718: r##"
This error indicates that a `#[lang = ".."]` attribute was placed
on the wrong type of item.
@@ -2138,6 +2103,7 @@
E0280, // requirement is not satisfied
E0284, // cannot resolve type
// E0285, // overflow evaluation builtin bounds
+// E0296, // replaced with a generic attribute input check
// E0300, // unexpanded macro
// E0304, // expected signed integer constant
// E0305, // expected constant
@@ -2180,4 +2146,5 @@
E0709, // multiple different lifetimes used in arguments of `async fn`
E0710, // an unknown tool name found in scoped lint
E0711, // a feature has been declared with conflicting stability attributes
+// E0702, // replaced with a generic attribute input check
}
diff --git a/src/librustc/hir/check_attr.rs b/src/librustc/hir/check_attr.rs
index a214ec8..b4a0071 100644
--- a/src/librustc/hir/check_attr.rs
+++ b/src/librustc/hir/check_attr.rs
@@ -142,15 +142,6 @@
return;
}
}
-
- if attr.meta_item_list().is_some() || attr.value_str().is_some() {
- struct_span_err!(self.tcx.sess,
- attr.span,
- E0702,
- "attribute should be empty")
- .span_label(item.span, "not empty")
- .emit();
- }
}
/// Check if the `#[marker]` attribute on an `item` is valid.
@@ -165,12 +156,6 @@
return;
}
}
-
- if !attr.is_word() {
- self.tcx.sess
- .struct_span_err(attr.span, "attribute should be empty")
- .emit();
- }
}
/// Check if the `#[repr]` attributes on `item` are valid.
diff --git a/src/librustc/hir/intravisit.rs b/src/librustc/hir/intravisit.rs
index f633703..041291e 100644
--- a/src/librustc/hir/intravisit.rs
+++ b/src/librustc/hir/intravisit.rs
@@ -35,11 +35,9 @@
use syntax_pos::Span;
use hir::*;
use hir::def::Def;
-use hir::map::{self, Map};
+use hir::map::Map;
use super::itemlikevisit::DeepVisitor;
-use std::cmp;
-
#[derive(Copy, Clone)]
pub enum FnKind<'a> {
/// `#[xxx] pub async/const/extern "Abi" fn foo()`
@@ -1133,57 +1131,3 @@
// the right thing to do, should content be added in the future,
// would be to walk it.
}
-
-#[derive(Copy, Clone, RustcEncodable, RustcDecodable, Debug)]
-pub struct IdRange {
- pub min: NodeId,
- pub max: NodeId,
-}
-
-impl IdRange {
- pub fn max() -> IdRange {
- IdRange {
- min: NodeId::MAX,
- max: NodeId::from_u32(0),
- }
- }
-
- pub fn empty(&self) -> bool {
- self.min >= self.max
- }
-
- pub fn contains(&self, id: NodeId) -> bool {
- id >= self.min && id < self.max
- }
-
- pub fn add(&mut self, id: NodeId) {
- self.min = cmp::min(self.min, id);
- self.max = cmp::max(self.max, NodeId::from_u32(id.as_u32() + 1));
- }
-}
-
-
-pub struct IdRangeComputingVisitor<'a, 'hir: 'a> {
- result: IdRange,
- map: &'a map::Map<'hir>,
-}
-
-impl<'a, 'hir> IdRangeComputingVisitor<'a, 'hir> {
- pub fn new(map: &'a map::Map<'hir>) -> IdRangeComputingVisitor<'a, 'hir> {
- IdRangeComputingVisitor { result: IdRange::max(), map: map }
- }
-
- pub fn result(&self) -> IdRange {
- self.result
- }
-}
-
-impl<'a, 'hir> Visitor<'hir> for IdRangeComputingVisitor<'a, 'hir> {
- fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'hir> {
- NestedVisitorMap::OnlyBodies(&self.map)
- }
-
- fn visit_id(&mut self, id: NodeId) {
- self.result.add(id);
- }
-}
diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs
index 8badcbf..8cdc493 100644
--- a/src/librustc/hir/lowering.rs
+++ b/src/librustc/hir/lowering.rs
@@ -3775,7 +3775,7 @@
let ohs = P(self.lower_expr(ohs));
hir::ExprKind::Unary(op, ohs)
}
- ExprKind::Lit(ref l) => hir::ExprKind::Lit(P((*l).clone())),
+ ExprKind::Lit(ref l) => hir::ExprKind::Lit((*l).clone()),
ExprKind::Cast(ref expr, ref ty) => {
let expr = P(self.lower_expr(expr));
hir::ExprKind::Cast(expr, self.lower_ty(ty, ImplTraitContext::disallowed()))
diff --git a/src/librustc/hir/map/def_collector.rs b/src/librustc/hir/map/def_collector.rs
index bc0a64a..c9b4b2b 100644
--- a/src/librustc/hir/map/def_collector.rs
+++ b/src/librustc/hir/map/def_collector.rs
@@ -120,10 +120,10 @@
let def_data = match i.node {
ItemKind::Impl(..) => DefPathData::Impl,
ItemKind::Trait(..) => DefPathData::Trait(i.ident.as_interned_str()),
+ ItemKind::TraitAlias(..) => DefPathData::TraitAlias(i.ident.as_interned_str()),
ItemKind::Enum(..) | ItemKind::Struct(..) | ItemKind::Union(..) |
- ItemKind::TraitAlias(..) | ItemKind::Existential(..) |
- ItemKind::ExternCrate(..) | ItemKind::ForeignMod(..) | ItemKind::Ty(..) =>
- DefPathData::TypeNs(i.ident.as_interned_str()),
+ ItemKind::Existential(..) | ItemKind::ExternCrate(..) | ItemKind::ForeignMod(..) |
+ ItemKind::Ty(..) => DefPathData::TypeNs(i.ident.as_interned_str()),
ItemKind::Mod(..) if i.ident == keywords::Invalid.ident() => {
return visit::walk_item(self, i);
}
diff --git a/src/librustc/hir/map/definitions.rs b/src/librustc/hir/map/definitions.rs
index 6b707dd..1b74451 100644
--- a/src/librustc/hir/map/definitions.rs
+++ b/src/librustc/hir/map/definitions.rs
@@ -373,7 +373,9 @@
/// GlobalMetaData identifies a piece of crate metadata that is global to
/// a whole crate (as opposed to just one item). GlobalMetaData components
/// are only supposed to show up right below the crate root.
- GlobalMetaData(InternedString)
+ GlobalMetaData(InternedString),
+ /// A trait alias.
+ TraitAlias(InternedString),
}
#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Debug,
@@ -615,6 +617,7 @@
match *self {
TypeNs(name) |
Trait(name) |
+ TraitAlias(name) |
AssocTypeInTrait(name) |
AssocTypeInImpl(name) |
AssocExistentialInImpl(name) |
@@ -642,6 +645,7 @@
let s = match *self {
TypeNs(name) |
Trait(name) |
+ TraitAlias(name) |
AssocTypeInTrait(name) |
AssocTypeInImpl(name) |
AssocExistentialInImpl(name) |
diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs
index 869baef..d9ca37c 100644
--- a/src/librustc/hir/map/mod.rs
+++ b/src/librustc/hir/map/mod.rs
@@ -509,6 +509,21 @@
&self.forest.krate.attrs
}
+ pub fn get_module(&self, module: DefId) -> (&'hir Mod, Span, NodeId)
+ {
+ let node_id = self.as_local_node_id(module).unwrap();
+ self.read(node_id);
+ match self.find_entry(node_id).unwrap().node {
+ Node::Item(&Item {
+ span,
+ node: ItemKind::Mod(ref m),
+ ..
+ }) => (m, span, node_id),
+ Node::Crate => (&self.forest.krate.module, self.forest.krate.span, node_id),
+ _ => panic!("not a module")
+ }
+ }
+
pub fn visit_item_likes_in_module<V>(&self, module: DefId, visitor: &mut V)
where V: ItemLikeVisitor<'hir>
{
diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs
index fc4bd05..4fc50bc 100644
--- a/src/librustc/hir/mod.rs
+++ b/src/librustc/hir/mod.rs
@@ -10,6 +10,7 @@
pub use self::UnOp::*;
pub use self::UnsafeSource::*;
+use errors::FatalError;
use hir::def::Def;
use hir::def_id::{DefId, DefIndex, LocalDefId, CRATE_DEF_INDEX};
use util::nodemap::{NodeMap, FxHashSet};
@@ -19,7 +20,7 @@
use syntax::source_map::{self, Spanned};
use rustc_target::spec::abi::Abi;
use syntax::ast::{self, CrateSugar, Ident, Name, NodeId, DUMMY_NODE_ID, AsmDialect};
-use syntax::ast::{Attribute, Lit, StrStyle, FloatTy, IntTy, UintTy};
+use syntax::ast::{Attribute, Label, Lit, StrStyle, FloatTy, IntTy, UintTy};
use syntax::attr::InlineAttr;
use syntax::ext::hygiene::SyntaxContext;
use syntax::ptr::P;
@@ -143,17 +144,6 @@
pub const DUMMY_ITEM_LOCAL_ID: ItemLocalId = ItemLocalId::MAX;
#[derive(Clone, RustcEncodable, RustcDecodable, Copy)]
-pub struct Label {
- pub ident: Ident,
-}
-
-impl fmt::Debug for Label {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "label({:?})", self.ident)
- }
-}
-
-#[derive(Clone, RustcEncodable, RustcDecodable, Copy)]
pub struct Lifetime {
pub id: NodeId,
pub span: Span,
@@ -1466,7 +1456,7 @@
/// A unary operation (For example: `!x`, `*x`)
Unary(UnOp, P<Expr>),
/// A literal (For example: `1`, `"foo"`)
- Lit(P<Lit>),
+ Lit(Lit),
/// A cast (`foo as f64`)
Cast(P<Expr>, P<Ty>),
Type(P<Expr>, P<Ty>),
@@ -2066,6 +2056,20 @@
pub hir_ref_id: HirId,
}
+impl TraitRef {
+ /// Get the `DefId` of the referenced trait. It _must_ actually be a trait or trait alias.
+ pub fn trait_def_id(&self) -> DefId {
+ match self.path.def {
+ Def::Trait(did) => did,
+ Def::TraitAlias(did) => did,
+ Def::Err => {
+ FatalError.raise();
+ }
+ _ => unreachable!(),
+ }
+ }
+}
+
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
pub struct PolyTraitRef {
/// The `'a` in `<'a> Foo<&'a T>`
diff --git a/src/librustc/ich/impls_hir.rs b/src/librustc/ich/impls_hir.rs
index 8ff60e5..f48059b 100644
--- a/src/librustc/ich/impls_hir.rs
+++ b/src/librustc/ich/impls_hir.rs
@@ -153,7 +153,7 @@
Error,
});
-impl_stable_hash_for!(struct hir::Label {
+impl_stable_hash_for!(struct ast::Label {
ident
});
diff --git a/src/librustc/ich/impls_syntax.rs b/src/librustc/ich/impls_syntax.rs
index 70ec72d..de56718 100644
--- a/src/librustc/ich/impls_syntax.rs
+++ b/src/librustc/ich/impls_syntax.rs
@@ -258,7 +258,7 @@
tokenstream::TokenTree::Delimited(span, delim, ref tts) => {
span.hash_stable(hcx, hasher);
std_hash::Hash::hash(&delim, hasher);
- for sub_tt in tts.stream().trees() {
+ for sub_tt in tts.trees() {
sub_tt.hash_stable(hcx, hasher);
}
}
diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs
index c428ff1..a0bd4f0 100644
--- a/src/librustc/lint/builtin.rs
+++ b/src/librustc/lint/builtin.rs
@@ -205,12 +205,6 @@
}
declare_lint! {
- pub BAD_REPR,
- Warn,
- "detects incorrect use of `repr` attribute"
-}
-
-declare_lint! {
pub DEPRECATED,
Warn,
"detects use of deprecated items",
@@ -359,6 +353,12 @@
Allow,
"detects the use of `?` as a macro separator"
}
+
+ declare_lint! {
+ pub ILL_FORMED_ATTRIBUTE_INPUT,
+ Warn,
+ "ill-formed attribute inputs that were previously accepted and used in practice"
+ }
}
declare_lint! {
@@ -368,6 +368,12 @@
report_in_external_macro: true
}
+declare_lint! {
+ pub AMBIGUOUS_ASSOCIATED_ITEMS,
+ Warn,
+ "ambiguous associated items"
+}
+
/// Does nothing as a lint pass, but registers some `Lint`s
/// that are used by other parts of the compiler.
#[derive(Copy, Clone)]
@@ -431,7 +437,9 @@
MACRO_USE_EXTERN_CRATE,
MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
parser::QUESTION_MARK_MACRO_SEP,
+ parser::ILL_FORMED_ATTRIBUTE_INPUT,
DEPRECATED_IN_FUTURE,
+ AMBIGUOUS_ASSOCIATED_ITEMS,
)
}
}
diff --git a/src/librustc/lint/levels.rs b/src/librustc/lint/levels.rs
index fe11349..8b45a5a 100644
--- a/src/librustc/lint/levels.rs
+++ b/src/librustc/lint/levels.rs
@@ -204,8 +204,6 @@
let mut metas = if let Some(metas) = meta.meta_item_list() {
metas
} else {
- let mut err = bad_attr(meta.span);
- err.emit();
continue;
};
diff --git a/src/librustc/lint/mod.rs b/src/librustc/lint/mod.rs
index a373faa..730ce91 100644
--- a/src/librustc/lint/mod.rs
+++ b/src/librustc/lint/mod.rs
@@ -28,7 +28,7 @@
use hir::intravisit;
use hir;
use lint::builtin::BuiltinLintDiagnostics;
-use lint::builtin::parser::QUESTION_MARK_MACRO_SEP;
+use lint::builtin::parser::{QUESTION_MARK_MACRO_SEP, ILL_FORMED_ATTRIBUTE_INPUT};
use session::{Session, DiagnosticMessageId};
use std::{hash, ptr};
use syntax::ast;
@@ -82,6 +82,7 @@
pub fn from_parser_lint_id(lint_id: BufferedEarlyLintId) -> &'static Self {
match lint_id {
BufferedEarlyLintId::QuestionMarkMacroSep => QUESTION_MARK_MACRO_SEP,
+ BufferedEarlyLintId::IllFormedAttributeInput => ILL_FORMED_ATTRIBUTE_INPUT,
}
}
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs
index 0c769c9..abbf0ae 100644
--- a/src/librustc/middle/dead.rs
+++ b/src/librustc/middle/dead.rs
@@ -409,7 +409,7 @@
}
}).chain(
// Seed entry point
- tcx.sess.entry_fn.borrow().map(|(id, _, _)| id)
+ tcx.entry_fn(LOCAL_CRATE).map(|(def_id, _)| tcx.hir().as_local_node_id(def_id).unwrap())
).collect::<Vec<_>>();
// Seed implemented trait items
diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs
index 6b593a1..218ca3b 100644
--- a/src/librustc/middle/entry.rs
+++ b/src/librustc/middle/entry.rs
@@ -1,5 +1,5 @@
use hir::map as hir_map;
-use hir::def_id::{CRATE_DEF_INDEX};
+use hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId, LOCAL_CRATE};
use session::{config, Session};
use session::config::EntryFnType;
use syntax::ast::NodeId;
@@ -8,6 +8,8 @@
use syntax_pos::Span;
use hir::{Item, ItemKind, ImplItem, TraitItem};
use hir::itemlikevisit::ItemLikeVisitor;
+use ty::TyCtxt;
+use ty::query::Providers;
struct EntryContext<'a, 'tcx: 'a> {
session: &'a Session,
@@ -45,36 +47,34 @@
}
}
-pub fn find_entry_point(session: &Session,
- hir_map: &hir_map::Map<'_>,
- crate_name: &str) {
- let any_exe = session.crate_types.borrow().iter().any(|ty| {
+fn entry_fn(tcx: TyCtxt<'_, '_, '_>, cnum: CrateNum) -> Option<(DefId, EntryFnType)> {
+ assert_eq!(cnum, LOCAL_CRATE);
+
+ let any_exe = tcx.sess.crate_types.borrow().iter().any(|ty| {
*ty == config::CrateType::Executable
});
if !any_exe {
// No need to find a main function
- session.entry_fn.set(None);
- return
+ return None;
}
// If the user wants no main function at all, then stop here.
- if attr::contains_name(&hir_map.krate().attrs, "no_main") {
- session.entry_fn.set(None);
- return
+ if attr::contains_name(&tcx.hir().krate().attrs, "no_main") {
+ return None;
}
let mut ctxt = EntryContext {
- session,
- map: hir_map,
+ session: tcx.sess,
+ map: tcx.hir(),
main_fn: None,
attr_main_fn: None,
start_fn: None,
non_main_fns: Vec::new(),
};
- hir_map.krate().visit_all_item_likes(&mut ctxt);
+ tcx.hir().krate().visit_all_item_likes(&mut ctxt);
- configure_main(&mut ctxt, crate_name);
+ configure_main(tcx, &ctxt)
}
// Beware, this is duplicated in `libsyntax/entry.rs`, so make sure to keep
@@ -135,43 +135,58 @@
.span_label(item.span, "multiple `start` functions")
.emit();
}
- },
- EntryPointType::None => ()
+ }
+ EntryPointType::None => (),
}
}
-fn configure_main(this: &mut EntryContext<'_, '_>, crate_name: &str) {
- if let Some((node_id, span)) = this.start_fn {
- this.session.entry_fn.set(Some((node_id, span, EntryFnType::Start)));
- } else if let Some((node_id, span)) = this.attr_main_fn {
- this.session.entry_fn.set(Some((node_id, span, EntryFnType::Main)));
- } else if let Some((node_id, span)) = this.main_fn {
- this.session.entry_fn.set(Some((node_id, span, EntryFnType::Main)));
+fn configure_main(
+ tcx: TyCtxt<'_, '_, '_>,
+ visitor: &EntryContext<'_, '_>,
+) -> Option<(DefId, EntryFnType)> {
+ if let Some((node_id, _)) = visitor.start_fn {
+ Some((tcx.hir().local_def_id(node_id), EntryFnType::Start))
+ } else if let Some((node_id, _)) = visitor.attr_main_fn {
+ Some((tcx.hir().local_def_id(node_id), EntryFnType::Main))
+ } else if let Some((node_id, _)) = visitor.main_fn {
+ Some((tcx.hir().local_def_id(node_id), EntryFnType::Main))
} else {
// No main function
- this.session.entry_fn.set(None);
- let mut err = struct_err!(this.session, E0601,
- "`main` function not found in crate `{}`", crate_name);
- if !this.non_main_fns.is_empty() {
+ let mut err = struct_err!(tcx.sess, E0601,
+ "`main` function not found in crate `{}`", tcx.crate_name(LOCAL_CRATE));
+ if !visitor.non_main_fns.is_empty() {
// There were some functions named 'main' though. Try to give the user a hint.
err.note("the main function must be defined at the crate level \
but you have one or more functions named 'main' that are not \
defined at the crate level. Either move the definition or \
attach the `#[main]` attribute to override this behavior.");
- for &(_, span) in &this.non_main_fns {
+ for &(_, span) in &visitor.non_main_fns {
err.span_note(span, "here is a function named 'main'");
}
err.emit();
- this.session.abort_if_errors();
+ tcx.sess.abort_if_errors();
} else {
- if let Some(ref filename) = this.session.local_crate_source_file {
+ if let Some(ref filename) = tcx.sess.local_crate_source_file {
err.note(&format!("consider adding a `main` function to `{}`", filename.display()));
}
- if this.session.teach(&err.get_code().unwrap()) {
+ if tcx.sess.teach(&err.get_code().unwrap()) {
err.note("If you don't know the basics of Rust, you can go look to the Rust Book \
to get started: https://doc.rust-lang.org/book/");
}
err.emit();
}
+
+ None
}
}
+
+pub fn find_entry_point(tcx: TyCtxt<'_, '_, '_>) -> Option<(DefId, EntryFnType)> {
+ tcx.entry_fn(LOCAL_CRATE)
+}
+
+pub fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ entry_fn,
+ ..*providers
+ };
+}
diff --git a/src/librustc/middle/intrinsicck.rs b/src/librustc/middle/intrinsicck.rs
index 1716daa..a0f7954 100644
--- a/src/librustc/middle/intrinsicck.rs
+++ b/src/librustc/middle/intrinsicck.rs
@@ -2,6 +2,7 @@
use hir::def_id::DefId;
use ty::{self, Ty, TyCtxt};
use ty::layout::{LayoutError, Pointer, SizeSkeleton, VariantIdx};
+use ty::query::{Providers, queries};
use rustc_target::spec::abi::Abi::RustIntrinsic;
use rustc_data_structures::indexed_vec::Idx;
@@ -10,10 +11,23 @@
use hir;
pub fn check_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- let mut visitor = ItemVisitor {
- tcx,
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::check_mod_intrinsics::ensure(tcx, tcx.hir().local_def_id(module));
+ }
+}
+
+fn check_mod_intrinsics<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(
+ module_def_id,
+ &mut ItemVisitor { tcx }.as_deep_visitor()
+ );
+}
+
+pub fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ check_mod_intrinsics,
+ ..*providers
};
- tcx.hir().krate().visit_all_item_likes(&mut visitor.as_deep_visitor());
}
struct ItemVisitor<'a, 'tcx: 'a> {
diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs
index a78cf1a..e73677d 100644
--- a/src/librustc/middle/liveness.rs
+++ b/src/librustc/middle/liveness.rs
@@ -100,6 +100,7 @@
use hir::def::*;
use hir::Node;
use ty::{self, TyCtxt};
+use ty::query::{Providers, queries};
use lint;
use errors::Applicability;
use util::nodemap::{NodeMap, HirIdMap, HirIdSet};
@@ -114,8 +115,9 @@
use syntax::symbol::keywords;
use syntax_pos::Span;
-use hir::{Expr, HirId};
use hir;
+use hir::{Expr, HirId};
+use hir::def_id::DefId;
use hir::intravisit::{self, Visitor, FnKind, NestedVisitorMap};
/// For use with `propagate_through_loop`.
@@ -179,11 +181,24 @@
fn visit_arm(&mut self, a: &'tcx hir::Arm) { visit_arm(self, a); }
}
+fn check_mod_liveness<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
+ tcx.hir().visit_item_likes_in_module(module_def_id, &mut IrMaps::new(tcx).as_deep_visitor());
+}
+
pub fn check_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- tcx.hir().krate().visit_all_item_likes(&mut IrMaps::new(tcx).as_deep_visitor());
+ for &module in tcx.hir().krate().modules.keys() {
+ queries::check_mod_liveness::ensure(tcx, tcx.hir().local_def_id(module));
+ }
tcx.sess.abort_if_errors();
}
+pub fn provide(providers: &mut Providers<'_>) {
+ *providers = Providers {
+ check_mod_liveness,
+ ..*providers
+ };
+}
+
impl fmt::Debug for LiveNode {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "ln({})", self.get())
@@ -911,17 +926,8 @@
}
fn compute(&mut self, body: &hir::Expr) -> LiveNode {
- // if there is a `break` or `again` at the top level, then it's
- // effectively a return---this only occurs in `for` loops,
- // where the body is really a closure.
-
debug!("compute: using id for body, {}", self.ir.tcx.hir().node_to_pretty_string(body.id));
- let exit_ln = self.s.exit_ln;
-
- self.break_ln.insert(body.id, exit_ln);
- self.cont_ln.insert(body.id, exit_ln);
-
// the fallthrough exit is only for those cases where we do not
// explicitly return:
let s = self.s;
@@ -1024,19 +1030,10 @@
self.propagate_through_expr(&e, succ)
}
- hir::ExprKind::Closure(.., blk_id, _, _) => {
+ hir::ExprKind::Closure(..) => {
debug!("{} is an ExprKind::Closure",
self.ir.tcx.hir().node_to_pretty_string(expr.id));
- // The next-node for a break is the successor of the entire
- // loop. The next-node for a continue is the top of this loop.
- let node = self.live_node(expr.hir_id, expr.span);
-
- let break_ln = succ;
- let cont_ln = node;
- self.break_ln.insert(blk_id.node_id, break_ln);
- self.cont_ln.insert(blk_id.node_id, cont_ln);
-
// the construction of a closure itself is not important,
// but we have to consider the closed over variables.
let caps = self.ir.capture_info_map.get(&expr.id).cloned().unwrap_or_else(||
@@ -1407,15 +1404,16 @@
debug!("propagate_through_loop: using id for loop body {} {}",
expr.id, self.ir.tcx.hir().node_to_pretty_string(body.id));
- let break_ln = succ;
- let cont_ln = ln;
- self.break_ln.insert(expr.id, break_ln);
- self.cont_ln.insert(expr.id, cont_ln);
+
+ self.break_ln.insert(expr.id, succ);
let cond_ln = match kind {
LoopLoop => ln,
WhileLoop(ref cond) => self.propagate_through_expr(&cond, ln),
};
+
+ self.cont_ln.insert(expr.id, cond_ln);
+
let body_ln = self.propagate_through_block(body, cond_ln);
// repeat until fixed point is reached:
diff --git a/src/librustc/middle/recursion_limit.rs b/src/librustc/middle/recursion_limit.rs
index ea83432..1eabd7f 100644
--- a/src/librustc/middle/recursion_limit.rs
+++ b/src/librustc/middle/recursion_limit.rs
@@ -11,14 +11,11 @@
use rustc_data_structures::sync::Once;
pub fn update_limits(sess: &Session, krate: &ast::Crate) {
- update_limit(sess, krate, &sess.recursion_limit, "recursion_limit",
- "recursion limit", 64);
- update_limit(sess, krate, &sess.type_length_limit, "type_length_limit",
- "type length limit", 1048576);
+ update_limit(krate, &sess.recursion_limit, "recursion_limit", 64);
+ update_limit(krate, &sess.type_length_limit, "type_length_limit", 1048576);
}
-fn update_limit(sess: &Session, krate: &ast::Crate, limit: &Once<usize>,
- name: &str, description: &str, default: usize) {
+fn update_limit(krate: &ast::Crate, limit: &Once<usize>, name: &str, default: usize) {
for attr in &krate.attrs {
if !attr.check_name(name) {
continue;
@@ -30,10 +27,6 @@
return;
}
}
-
- span_err!(sess, attr.span, E0296,
- "malformed {} attribute, expected #![{}=\"N\"]",
- description, name);
}
limit.set(default);
}
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 42adc6a..cdbef56 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -6,7 +6,7 @@
use session::{early_error, early_warn, Session};
use session::search_paths::SearchPath;
-use rustc_target::spec::{LinkerFlavor, PanicStrategy, RelroLevel};
+use rustc_target::spec::{LinkerFlavor, MergeFunctions, PanicStrategy, RelroLevel};
use rustc_target::spec::{Target, TargetTriple};
use lint;
use middle::cstore;
@@ -649,15 +649,15 @@
}
}
-// The type of entry function, so
-// users can have their own entry
-// functions
-#[derive(Copy, Clone, PartialEq)]
+// The type of entry function, so users can have their own entry functions
+#[derive(Copy, Clone, PartialEq, Hash, Debug)]
pub enum EntryFnType {
Main,
Start,
}
+impl_stable_hash_via_hash!(EntryFnType);
+
#[derive(Copy, PartialEq, PartialOrd, Clone, Ord, Eq, Hash, Debug)]
pub enum CrateType {
Executable,
@@ -808,13 +808,16 @@
pub const parse_cross_lang_lto: Option<&str> =
Some("either a boolean (`yes`, `no`, `on`, `off`, etc), \
or the path to the linker plugin");
+ pub const parse_merge_functions: Option<&str> =
+ Some("one of: `disabled`, `trampolines`, or `aliases`");
}
#[allow(dead_code)]
mod $mod_set {
use super::{$struct_name, Passes, Sanitizer, LtoCli, CrossLangLto};
- use rustc_target::spec::{LinkerFlavor, PanicStrategy, RelroLevel};
+ use rustc_target::spec::{LinkerFlavor, MergeFunctions, PanicStrategy, RelroLevel};
use std::path::PathBuf;
+ use std::str::FromStr;
$(
pub fn $opt(cg: &mut $struct_name, v: Option<&str>) -> bool {
@@ -1046,6 +1049,14 @@
};
true
}
+
+ fn parse_merge_functions(slot: &mut Option<MergeFunctions>, v: Option<&str>) -> bool {
+ match v.and_then(|s| MergeFunctions::from_str(s).ok()) {
+ Some(mergefunc) => *slot = Some(mergefunc),
+ _ => return false,
+ }
+ true
+ }
}
) }
@@ -1342,10 +1353,15 @@
unpretty: Option<String> = (None, parse_unpretty, [UNTRACKED],
"Present the input source, unstable (and less-pretty) variants;
valid types are any of the types for `--pretty`, as well as:
+ `expanded`, `expanded,identified`,
+ `expanded,hygiene` (with internal representations),
`flowgraph=<nodeid>` (graphviz formatted flowgraph for node),
+ `flowgraph,unlabelled=<nodeid>` (unlabelled graphviz formatted flowgraph for node),
`everybody_loops` (all function bodies replaced with `loop {}`),
- `hir` (the HIR), `hir,identified`, or
- `hir,typed` (HIR with types for each node)."),
+ `hir` (the HIR), `hir,identified`,
+ `hir,typed` (HIR with types for each node),
+ `hir-tree` (dump the raw HIR),
+ `mir` (the MIR), or `mir-cfg` (graphviz formatted MIR)"),
run_dsymutil: Option<bool> = (None, parse_opt_bool, [TRACKED],
"run `dsymutil` and delete intermediate object files"),
ui_testing: bool = (false, parse_bool, [UNTRACKED],
@@ -1376,6 +1392,9 @@
"whether to use the PLT when calling into shared libraries;
only has effect for PIC code on systems with ELF binaries
(default: PLT is disabled if full relro is enabled)"),
+ merge_functions: Option<MergeFunctions> = (None, parse_merge_functions, [TRACKED],
+ "control the operation of the MergeFunctions LLVM pass, taking
+ the same values as the target option of the same name"),
}
pub fn default_lib_output() -> CrateType {
@@ -2394,7 +2413,7 @@
use super::{CrateType, DebugInfo, ErrorOutputType, OptLevel, OutputTypes,
Passes, Sanitizer, LtoCli, CrossLangLto};
use syntax::feature_gate::UnstableFeatures;
- use rustc_target::spec::{PanicStrategy, RelroLevel, TargetTriple};
+ use rustc_target::spec::{MergeFunctions, PanicStrategy, RelroLevel, TargetTriple};
use syntax::edition::Edition;
pub trait DepTrackingHash {
@@ -2437,12 +2456,14 @@
impl_dep_tracking_hash_via_hash!(Option<usize>);
impl_dep_tracking_hash_via_hash!(Option<String>);
impl_dep_tracking_hash_via_hash!(Option<(String, u64)>);
+ impl_dep_tracking_hash_via_hash!(Option<MergeFunctions>);
impl_dep_tracking_hash_via_hash!(Option<PanicStrategy>);
impl_dep_tracking_hash_via_hash!(Option<RelroLevel>);
impl_dep_tracking_hash_via_hash!(Option<lint::Level>);
impl_dep_tracking_hash_via_hash!(Option<PathBuf>);
impl_dep_tracking_hash_via_hash!(Option<cstore::NativeLibraryKind>);
impl_dep_tracking_hash_via_hash!(CrateType);
+ impl_dep_tracking_hash_via_hash!(MergeFunctions);
impl_dep_tracking_hash_via_hash!(PanicStrategy);
impl_dep_tracking_hash_via_hash!(RelroLevel);
impl_dep_tracking_hash_via_hash!(Passes);
@@ -2528,7 +2549,7 @@
use std::iter::FromIterator;
use std::path::PathBuf;
use super::{Externs, OutputType, OutputTypes};
- use rustc_target::spec::{PanicStrategy, RelroLevel};
+ use rustc_target::spec::{MergeFunctions, PanicStrategy, RelroLevel};
use syntax::symbol::Symbol;
use syntax::edition::{Edition, DEFAULT_EDITION};
use syntax;
@@ -3183,6 +3204,10 @@
opts = reference.clone();
opts.debugging_opts.cross_lang_lto = CrossLangLto::LinkerPluginAuto;
assert!(reference.dep_tracking_hash() != opts.dep_tracking_hash());
+
+ opts = reference.clone();
+ opts.debugging_opts.merge_functions = Some(MergeFunctions::Disabled);
+ assert!(reference.dep_tracking_hash() != opts.dep_tracking_hash());
}
#[test]
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
index 7363b8b..cf00bf3 100644
--- a/src/librustc/session/mod.rs
+++ b/src/librustc/session/mod.rs
@@ -67,8 +67,6 @@
/// This is `None` if the host and target are the same.
pub target_tlib_path: Option<SearchPath>,
pub parse_sess: ParseSess,
- /// For a library crate, this is always none
- pub entry_fn: Once<Option<(NodeId, Span, config::EntryFnType)>>,
pub sysroot: PathBuf,
/// The name of the root source file of the crate, in the local file system.
/// `None` means that there is no source file.
@@ -1173,8 +1171,6 @@
host_tlib_path,
target_tlib_path,
parse_sess: p_s,
- // For a library crate, this is always none
- entry_fn: Once::new(),
sysroot,
local_crate_source_file,
working_dir,
diff --git a/src/librustc/traits/on_unimplemented.rs b/src/librustc/traits/on_unimplemented.rs
index 4b188d2..3ec901f 100644
--- a/src/librustc/traits/on_unimplemented.rs
+++ b/src/librustc/traits/on_unimplemented.rs
@@ -157,10 +157,7 @@
note: None,
}))
} else {
- return Err(parse_error(tcx, attr.span,
- "`#[rustc_on_unimplemented]` requires a value",
- "value required here",
- Some(r#"eg `#[rustc_on_unimplemented(message="foo")]`"#)));
+ return Err(ErrorReported);
};
debug!("of_item({:?}/{:?}) = {:?}", trait_def_id, impl_def_id, result);
result
diff --git a/src/librustc/traits/select.rs b/src/librustc/traits/select.rs
index 6db6fe3..9a0610f 100644
--- a/src/librustc/traits/select.rs
+++ b/src/librustc/traits/select.rs
@@ -42,7 +42,7 @@
use rustc_data_structures::sync::Lock;
use rustc_target::spec::abi::Abi;
use std::cmp;
-use std::fmt;
+use std::fmt::{self, Display};
use std::iter;
use std::rc::Rc;
use util::nodemap::{FxHashMap, FxHashSet};
@@ -629,7 +629,8 @@
obligation: &PredicateObligation<'tcx>,
) -> Result<EvaluationResult, OverflowError> {
self.evaluation_probe(|this| {
- this.evaluate_predicate_recursively(TraitObligationStackList::empty(), obligation)
+ this.evaluate_predicate_recursively(TraitObligationStackList::empty(),
+ obligation.clone())
})
}
@@ -655,12 +656,12 @@
predicates: I,
) -> Result<EvaluationResult, OverflowError>
where
- I: IntoIterator<Item = &'a PredicateObligation<'tcx>>,
+ I: IntoIterator<Item = PredicateObligation<'tcx>>,
'tcx: 'a,
{
let mut result = EvaluatedToOk;
for obligation in predicates {
- let eval = self.evaluate_predicate_recursively(stack, obligation)?;
+ let eval = self.evaluate_predicate_recursively(stack, obligation.clone())?;
debug!(
"evaluate_predicate_recursively({:?}) = {:?}",
obligation, eval
@@ -679,9 +680,19 @@
fn evaluate_predicate_recursively<'o>(
&mut self,
previous_stack: TraitObligationStackList<'o, 'tcx>,
- obligation: &PredicateObligation<'tcx>,
+ obligation: PredicateObligation<'tcx>,
) -> Result<EvaluationResult, OverflowError> {
- debug!("evaluate_predicate_recursively({:?})", obligation);
+ debug!("evaluate_predicate_recursively(previous_stack={:?}, obligation={:?})",
+ previous_stack.head(), obligation);
+
+ // Previous_stack stores a TraitObligatiom, while 'obligation' is
+ // a PredicateObligation. These are distinct types, so we can't
+ // use any Option combinator method that would force them to be
+ // the same
+ match previous_stack.head() {
+ Some(h) => self.check_recursion_limit(&obligation, h.obligation)?,
+ None => self.check_recursion_limit(&obligation, &obligation)?
+ }
match obligation.predicate {
ty::Predicate::Trait(ref t) => {
@@ -695,8 +706,9 @@
match self.infcx
.subtype_predicate(&obligation.cause, obligation.param_env, p)
{
- Some(Ok(InferOk { obligations, .. })) => {
- self.evaluate_predicates_recursively(previous_stack, &obligations)
+ Some(Ok(InferOk { mut obligations, .. })) => {
+ self.add_depth(obligations.iter_mut(), obligation.recursion_depth);
+ self.evaluate_predicates_recursively(previous_stack,obligations.into_iter())
}
Some(Err(_)) => Ok(EvaluatedToErr),
None => Ok(EvaluatedToAmbig),
@@ -710,8 +722,9 @@
ty,
obligation.cause.span,
) {
- Some(obligations) => {
- self.evaluate_predicates_recursively(previous_stack, obligations.iter())
+ Some(mut obligations) => {
+ self.add_depth(obligations.iter_mut(), obligation.recursion_depth);
+ self.evaluate_predicates_recursively(previous_stack, obligations.into_iter())
}
None => Ok(EvaluatedToAmbig),
},
@@ -733,10 +746,11 @@
ty::Predicate::Projection(ref data) => {
let project_obligation = obligation.with(data.clone());
match project::poly_project_and_unify_type(self, &project_obligation) {
- Ok(Some(subobligations)) => {
+ Ok(Some(mut subobligations)) => {
+ self.add_depth(subobligations.iter_mut(), obligation.recursion_depth);
let result = self.evaluate_predicates_recursively(
previous_stack,
- subobligations.iter(),
+ subobligations.into_iter(),
);
if let Some(key) =
ProjectionCacheKey::from_poly_projection_predicate(self, data)
@@ -1005,7 +1019,7 @@
match this.confirm_candidate(stack.obligation, candidate) {
Ok(selection) => this.evaluate_predicates_recursively(
stack.list(),
- selection.nested_obligations().iter(),
+ selection.nested_obligations().into_iter()
),
Err(..) => Ok(EvaluatedToErr),
}
@@ -1080,6 +1094,45 @@
.insert(trait_ref, WithDepNode::new(dep_node, result));
}
+ // For various reasons, it's possible for a subobligation
+ // to have a *lower* recursion_depth than the obligation used to create it.
+ // Projection sub-obligations may be returned from the projection cache,
+ // which results in obligations with an 'old' recursion_depth.
+ // Additionally, methods like ty::wf::obligations and
+ // InferCtxt.subtype_predicate produce subobligations without
+ // taking in a 'parent' depth, causing the generated subobligations
+ // to have a recursion_depth of 0
+ //
+ // To ensure that obligation_depth never decreasees, we force all subobligations
+ // to have at least the depth of the original obligation.
+ fn add_depth<T: 'cx, I: Iterator<Item = &'cx mut Obligation<'tcx, T>>>(&self, it: I,
+ min_depth: usize) {
+ it.for_each(|o| o.recursion_depth = cmp::max(min_depth, o.recursion_depth) + 1);
+ }
+
+ // Check that the recursion limit has not been exceeded.
+ //
+ // The weird return type of this function allows it to be used with the 'try' (?)
+ // operator within certain functions
+ fn check_recursion_limit<T: Display + TypeFoldable<'tcx>, V: Display + TypeFoldable<'tcx>>(
+ &self,
+ obligation: &Obligation<'tcx, T>,
+ error_obligation: &Obligation<'tcx, V>
+ ) -> Result<(), OverflowError> {
+ let recursion_limit = *self.infcx.tcx.sess.recursion_limit.get();
+ if obligation.recursion_depth >= recursion_limit {
+ match self.query_mode {
+ TraitQueryMode::Standard => {
+ self.infcx().report_overflow_error(error_obligation, true);
+ }
+ TraitQueryMode::Canonical => {
+ return Err(OverflowError);
+ }
+ }
+ }
+ Ok(())
+ }
+
///////////////////////////////////////////////////////////////////////////
// CANDIDATE ASSEMBLY
//
@@ -1096,17 +1149,8 @@
) -> SelectionResult<'tcx, SelectionCandidate<'tcx>> {
// Watch out for overflow. This intentionally bypasses (and does
// not update) the cache.
- let recursion_limit = *self.infcx.tcx.sess.recursion_limit.get();
- if stack.obligation.recursion_depth >= recursion_limit {
- match self.query_mode {
- TraitQueryMode::Standard => {
- self.infcx().report_overflow_error(&stack.obligation, true);
- }
- TraitQueryMode::Canonical => {
- return Err(Overflow);
- }
- }
- }
+ self.check_recursion_limit(&stack.obligation, &stack.obligation)?;
+
// Check the cache. Note that we freshen the trait-ref
// separately rather than using `stack.fresh_trait_ref` --
@@ -1767,7 +1811,7 @@
self.evaluation_probe(|this| {
match this.match_where_clause_trait_ref(stack.obligation, where_clause_trait_ref) {
Ok(obligations) => {
- this.evaluate_predicates_recursively(stack.list(), obligations.iter())
+ this.evaluate_predicates_recursively(stack.list(), obligations.into_iter())
}
Err(()) => Ok(EvaluatedToErr),
}
@@ -2154,7 +2198,7 @@
let def_id = obligation.predicate.def_id();
- if ty::is_trait_alias(self.tcx(), def_id) {
+ if self.tcx().is_trait_alias(def_id) {
candidates.vec.push(TraitAliasCandidate(def_id.clone()));
}
@@ -3802,6 +3846,10 @@
fn with(r: &'o TraitObligationStack<'o, 'tcx>) -> TraitObligationStackList<'o, 'tcx> {
TraitObligationStackList { head: Some(r) }
}
+
+ fn head(&self) -> Option<&'o TraitObligationStack<'o, 'tcx>> {
+ self.head
+ }
}
impl<'o, 'tcx> Iterator for TraitObligationStackList<'o, 'tcx> {
diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs
index d69219e..e37eab6 100644
--- a/src/librustc/ty/context.rs
+++ b/src/librustc/ty/context.rs
@@ -983,6 +983,9 @@
maybe_unused_trait_imports: FxHashSet<DefId>,
maybe_unused_extern_crates: Vec<(DefId, Span)>,
+ /// A map of glob use to a set of names it actually imports. Currently only
+ /// used in save-analysis.
+ glob_map: FxHashMap<DefId, FxHashSet<ast::Name>>,
/// Extern prelude entries. The value is `true` if the entry was introduced
/// via `extern crate` item and not `--extern` option or compiler built-in.
pub extern_prelude: FxHashMap<ast::Name, bool>,
@@ -1232,6 +1235,9 @@
.into_iter()
.map(|(id, sp)| (hir.local_def_id(id), sp))
.collect(),
+ glob_map: resolutions.glob_map.into_iter().map(|(id, names)| {
+ (hir.local_def_id(id), names)
+ }).collect(),
extern_prelude: resolutions.extern_prelude,
hir_map: hir,
def_path_hash_to_def_id,
@@ -2972,6 +2978,10 @@
assert_eq!(cnum, LOCAL_CRATE);
Lrc::new(tcx.maybe_unused_extern_crates.clone())
};
+ providers.names_imported_by_glob_use = |tcx, id| {
+ assert_eq!(id.krate, LOCAL_CRATE);
+ Lrc::new(tcx.glob_map.get(&id).cloned().unwrap_or_default())
+ };
providers.stability_index = |tcx, cnum| {
assert_eq!(cnum, LOCAL_CRATE);
diff --git a/src/librustc/ty/item_path.rs b/src/librustc/ty/item_path.rs
index 417e140..9328de4 100644
--- a/src/librustc/ty/item_path.rs
+++ b/src/librustc/ty/item_path.rs
@@ -311,6 +311,7 @@
data @ DefPathData::Misc |
data @ DefPathData::TypeNs(..) |
data @ DefPathData::Trait(..) |
+ data @ DefPathData::TraitAlias(..) |
data @ DefPathData::AssocTypeInTrait(..) |
data @ DefPathData::AssocTypeInImpl(..) |
data @ DefPathData::AssocExistentialInImpl(..) |
diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs
index cfd9994..dd315cf 100644
--- a/src/librustc/ty/mod.rs
+++ b/src/librustc/ty/mod.rs
@@ -4,7 +4,7 @@
pub use self::IntVarValue::*;
pub use self::fold::TypeFoldable;
-use hir::{map as hir_map, FreevarMap, TraitMap};
+use hir::{map as hir_map, FreevarMap, GlobMap, TraitMap};
use hir::Node;
use hir::def::{Def, CtorKind, ExportMap};
use hir::def_id::{CrateNum, DefId, LocalDefId, CRATE_DEF_INDEX, LOCAL_CRATE};
@@ -115,16 +115,6 @@
// Data types
-/// The complete set of all analyses described in this module. This is
-/// produced by the driver and fed to codegen and later passes.
-///
-/// N.B., these contents are being migrated into queries using the
-/// *on-demand* infrastructure.
-#[derive(Clone)]
-pub struct CrateAnalysis {
- pub glob_map: Option<hir::GlobMap>,
-}
-
#[derive(Clone)]
pub struct Resolutions {
pub freevars: FreevarMap,
@@ -132,6 +122,7 @@
pub maybe_unused_trait_imports: NodeSet,
pub maybe_unused_extern_crates: Vec<(NodeId, Span)>,
pub export_map: ExportMap,
+ pub glob_map: GlobMap,
/// Extern prelude entries. The value is `true` if the entry was introduced
/// via `extern crate` item and not `--extern` option or compiler built-in.
pub extern_prelude: FxHashMap<Name, bool>,
@@ -3179,18 +3170,6 @@
None
}
-/// Returns `true` if `def_id` is a trait alias.
-pub fn is_trait_alias(tcx: TyCtxt<'_, '_, '_>, def_id: DefId) -> bool {
- if let Some(node_id) = tcx.hir().as_local_node_id(def_id) {
- if let Node::Item(item) = tcx.hir().get(node_id) {
- if let hir::ItemKind::TraitAlias(..) = item.node {
- return true;
- }
- }
- }
- false
-}
-
/// See `ParamEnv` struct definition for details.
fn param_env<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
def_id: DefId)
diff --git a/src/librustc/ty/query/config.rs b/src/librustc/ty/query/config.rs
index ca5d1f6..ae41ca0 100644
--- a/src/librustc/ty/query/config.rs
+++ b/src/librustc/ty/query/config.rs
@@ -109,6 +109,33 @@
}
}
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_privacy<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking privacy in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_intrinsics<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking intrinsics in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
+impl<'tcx> QueryDescription<'tcx> for queries::check_mod_liveness<'tcx> {
+ fn describe(
+ tcx: TyCtxt<'_, '_, '_>,
+ key: DefId,
+ ) -> Cow<'static, str> {
+ format!("checking liveness of variables in {}", key.describe_as_module(tcx)).into()
+ }
+}
+
impl<'tcx> QueryDescription<'tcx> for queries::collect_mod_item_types<'tcx> {
fn describe(
tcx: TyCtxt<'_, '_, '_>,
@@ -629,6 +656,12 @@
}
}
+impl<'tcx> QueryDescription<'tcx> for queries::entry_fn<'tcx> {
+ fn describe(_tcx: TyCtxt<'_, '_, '_>, _: CrateNum) -> Cow<'static, str> {
+ "looking up the entry function of a crate".into()
+ }
+}
+
impl<'tcx> QueryDescription<'tcx> for queries::plugin_registrar_fn<'tcx> {
fn describe(_tcx: TyCtxt<'_, '_, '_>, _: CrateNum) -> Cow<'static, str> {
"looking up the plugin registrar for a crate".into()
diff --git a/src/librustc/ty/query/mod.rs b/src/librustc/ty/query/mod.rs
index 39d76ce..10f3571 100644
--- a/src/librustc/ty/query/mod.rs
+++ b/src/librustc/ty/query/mod.rs
@@ -22,7 +22,7 @@
use mir;
use mir::interpret::GlobalId;
use session::{CompileResult, CrateDisambiguator};
-use session::config::OutputFilenames;
+use session::config::{EntryFnType, OutputFilenames};
use traits::{self, Vtable};
use traits::query::{
CanonicalPredicateGoal, CanonicalProjectionGoal,
@@ -264,6 +264,12 @@
[] fn check_mod_item_types: CheckModItemTypes(DefId) -> (),
+ [] fn check_mod_privacy: CheckModPrivacy(DefId) -> (),
+
+ [] fn check_mod_intrinsics: CheckModIntrinsics(DefId) -> (),
+
+ [] fn check_mod_liveness: CheckModLiveness(DefId) -> (),
+
[] fn collect_mod_item_types: CollectModItemTypes(DefId) -> (),
/// Caches CoerceUnsized kinds for impls on custom types.
@@ -476,6 +482,9 @@
[] fn foreign_modules: ForeignModules(CrateNum) -> Lrc<Vec<ForeignModule>>,
+ /// Identifies the entry-point (e.g. the `main` function) for a given
+ /// crate, returning `None` if there is no entry point (such as for library crates).
+ [] fn entry_fn: EntryFn(CrateNum) -> Option<(DefId, EntryFnType)>,
[] fn plugin_registrar_fn: PluginRegistrarFn(CrateNum) -> Option<DefId>,
[] fn proc_macro_decls_static: ProcMacroDeclsStatic(CrateNum) -> Option<DefId>,
[] fn crate_disambiguator: CrateDisambiguator(CrateNum) -> CrateDisambiguator,
@@ -541,6 +550,8 @@
[] fn maybe_unused_trait_import: MaybeUnusedTraitImport(DefId) -> bool,
[] fn maybe_unused_extern_crates: maybe_unused_extern_crates_node(CrateNum)
-> Lrc<Vec<(DefId, Span)>>,
+ [] fn names_imported_by_glob_use: NamesImportedByGlobUse(DefId)
+ -> Lrc<FxHashSet<ast::Name>>,
[] fn stability_index: stability_index_node(CrateNum) -> Lrc<stability::Index<'tcx>>,
[] fn all_crate_nums: all_crate_nums_node(CrateNum) -> Lrc<Vec<CrateNum>>,
diff --git a/src/librustc/ty/query/plumbing.rs b/src/librustc/ty/query/plumbing.rs
index 562cd75..1cc9bbd 100644
--- a/src/librustc/ty/query/plumbing.rs
+++ b/src/librustc/ty/query/plumbing.rs
@@ -2,7 +2,7 @@
//! that generate the actual methods on tcx which find and execute the
//! provider, manage the caches, and so forth.
-use dep_graph::{DepNodeIndex, DepNode, DepKind, DepNodeColor};
+use dep_graph::{DepNodeIndex, DepNode, DepKind, SerializedDepNodeIndex};
use errors::DiagnosticBuilder;
use errors::Level;
use errors::Diagnostic;
@@ -335,40 +335,6 @@
eprintln!("end of query stack");
}
- /// Try to read a node index for the node dep_node.
- /// A node will have an index, when it's already been marked green, or when we can mark it
- /// green. This function will mark the current task as a reader of the specified node, when
- /// a node index can be found for that node.
- pub(super) fn try_mark_green_and_read(self, dep_node: &DepNode) -> Option<DepNodeIndex> {
- match self.dep_graph.node_color(dep_node) {
- Some(DepNodeColor::Green(dep_node_index)) => {
- self.dep_graph.read_index(dep_node_index);
- Some(dep_node_index)
- }
- Some(DepNodeColor::Red) => {
- None
- }
- None => {
- // try_mark_green (called below) will panic when full incremental
- // compilation is disabled. If that's the case, we can't try to mark nodes
- // as green anyway, so we can safely return None here.
- if !self.dep_graph.is_fully_enabled() {
- return None;
- }
- match self.dep_graph.try_mark_green(self.global_tcx(), &dep_node) {
- Some(dep_node_index) => {
- debug_assert!(self.dep_graph.is_green(&dep_node));
- self.dep_graph.read_index(dep_node_index);
- Some(dep_node_index)
- }
- None => {
- None
- }
- }
- }
- }
- }
-
#[inline(never)]
fn try_get_with<Q: QueryDescription<'gcx>>(
self,
@@ -435,10 +401,13 @@
}
if !dep_node.kind.is_input() {
- if let Some(dep_node_index) = self.try_mark_green_and_read(&dep_node) {
+ if let Some((prev_dep_node_index,
+ dep_node_index)) = self.dep_graph.try_mark_green_and_read(self,
+ &dep_node) {
return Ok(self.load_from_disk_and_cache_in_memory::<Q>(
key,
job,
+ prev_dep_node_index,
dep_node_index,
&dep_node
))
@@ -454,6 +423,7 @@
self,
key: Q::Key,
job: JobOwner<'a, 'gcx, Q>,
+ prev_dep_node_index: SerializedDepNodeIndex,
dep_node_index: DepNodeIndex,
dep_node: &DepNode
) -> Q::Value
@@ -466,10 +436,7 @@
// First we try to load the result from the on-disk cache
let result = if Q::cache_on_disk(key.clone()) &&
self.sess.opts.debugging_opts.incremental_queries {
- let prev_dep_node_index =
- self.dep_graph.prev_dep_node_index_of(dep_node);
- let result = Q::try_load_from_disk(self.global_tcx(),
- prev_dep_node_index);
+ let result = Q::try_load_from_disk(self.global_tcx(), prev_dep_node_index);
// We always expect to find a cached result for things that
// can be forced from DepNode.
@@ -624,7 +591,7 @@
// Ensuring an "input" or anonymous query makes no sense
assert!(!dep_node.kind.is_anon());
assert!(!dep_node.kind.is_input());
- if self.try_mark_green_and_read(&dep_node).is_none() {
+ if self.dep_graph.try_mark_green_and_read(self, &dep_node).is_none() {
// A None return from `try_mark_green_and_read` means that this is either
// a new dep node or that the dep node has already been marked red.
// Either way, we can't call `dep_graph.read()` as we don't have the
@@ -1281,6 +1248,9 @@
DepKind::CheckModLoops => { force!(check_mod_loops, def_id!()); }
DepKind::CheckModUnstableApiUsage => { force!(check_mod_unstable_api_usage, def_id!()); }
DepKind::CheckModItemTypes => { force!(check_mod_item_types, def_id!()); }
+ DepKind::CheckModPrivacy => { force!(check_mod_privacy, def_id!()); }
+ DepKind::CheckModIntrinsics => { force!(check_mod_intrinsics, def_id!()); }
+ DepKind::CheckModLiveness => { force!(check_mod_liveness, def_id!()); }
DepKind::CollectModItemTypes => { force!(collect_mod_item_types, def_id!()); }
DepKind::Reachability => { force!(reachable_set, LOCAL_CRATE); }
DepKind::MirKeys => { force!(mir_keys, LOCAL_CRATE); }
@@ -1362,6 +1332,7 @@
DepKind::CheckImplItemWellFormed => { force!(check_impl_item_well_formed, def_id!()); }
DepKind::ReachableNonGenerics => { force!(reachable_non_generics, krate!()); }
DepKind::NativeLibraries => { force!(native_libraries, krate!()); }
+ DepKind::EntryFn => { force!(entry_fn, krate!()); }
DepKind::PluginRegistrarFn => { force!(plugin_registrar_fn, krate!()); }
DepKind::ProcMacroDeclsStatic => { force!(proc_macro_decls_static, krate!()); }
DepKind::CrateDisambiguator => { force!(crate_disambiguator, krate!()); }
@@ -1413,6 +1384,7 @@
DepKind::MaybeUnusedTraitImport => {
force!(maybe_unused_trait_import, def_id!());
}
+ DepKind::NamesImportedByGlobUse => { force!(names_imported_by_glob_use, def_id!()); }
DepKind::MaybeUnusedExternCrates => { force!(maybe_unused_extern_crates, LOCAL_CRATE); }
DepKind::StabilityIndex => { force!(stability_index, LOCAL_CRATE); }
DepKind::AllTraits => { force!(all_traits, LOCAL_CRATE); }
diff --git a/src/librustc/ty/util.rs b/src/librustc/ty/util.rs
index e989ef8..75fc0f7 100644
--- a/src/librustc/ty/util.rs
+++ b/src/librustc/ty/util.rs
@@ -526,6 +526,15 @@
}
}
+ /// True if `def_id` refers to a trait alias (i.e., `trait Foo = ...;`).
+ pub fn is_trait_alias(self, def_id: DefId) -> bool {
+ if let DefPathData::TraitAlias(_) = self.def_key(def_id).disambiguated_data.data {
+ true
+ } else {
+ false
+ }
+ }
+
/// True if this def-id refers to the implicit constructor for
/// a tuple struct like `struct Foo(u32)`.
pub fn is_struct_constructor(self, def_id: DefId) -> bool {
diff --git a/src/librustc/util/ppaux.rs b/src/librustc/util/ppaux.rs
index 04e5718..51e9192 100644
--- a/src/librustc/util/ppaux.rs
+++ b/src/librustc/util/ppaux.rs
@@ -409,6 +409,7 @@
DefPathData::AssocTypeInImpl(_) |
DefPathData::AssocExistentialInImpl(_) |
DefPathData::Trait(_) |
+ DefPathData::TraitAlias(_) |
DefPathData::Impl |
DefPathData::TypeNs(_) => {
break;
diff --git a/src/librustc_borrowck/borrowck/mod.rs b/src/librustc_borrowck/borrowck/mod.rs
index 66303ab..72963cb 100644
--- a/src/librustc_borrowck/borrowck/mod.rs
+++ b/src/librustc_borrowck/borrowck/mod.rs
@@ -39,7 +39,6 @@
use errors::{Applicability, DiagnosticBuilder, DiagnosticId};
use rustc::hir;
-use rustc::hir::intravisit::{self, Visitor};
use dataflow::{DataFlowContext, BitwiseOperator, DataFlowOperator, KillFrom};
@@ -157,12 +156,6 @@
where F: FnOnce(&mut BorrowckCtxt<'a, 'tcx>) -> &'c cfg::CFG
{
// Check the body of fn items.
- let tcx = this.tcx;
- let id_range = {
- let mut visitor = intravisit::IdRangeComputingVisitor::new(&tcx.hir());
- visitor.visit_body(this.body);
- visitor.result()
- };
let (all_loans, move_data) =
gather_loans::gather_loans_in_fn(this, body_id);
@@ -184,7 +177,6 @@
Some(this.body),
cfg,
LoanDataFlowOperator,
- id_range,
all_loans.len());
for (loan_idx, loan) in all_loans.iter().enumerate() {
loan_dfcx.add_gen(loan.gen_scope.item_local_id(), loan_idx);
@@ -198,7 +190,6 @@
let flowed_moves = move_data::FlowedMoveData::new(move_data,
this,
cfg,
- id_range,
this.body);
Some(AnalysisData { all_loans,
diff --git a/src/librustc_borrowck/borrowck/move_data.rs b/src/librustc_borrowck/borrowck/move_data.rs
index c5bee87..56c9f92 100644
--- a/src/librustc_borrowck/borrowck/move_data.rs
+++ b/src/librustc_borrowck/borrowck/move_data.rs
@@ -15,7 +15,6 @@
use std::usize;
use syntax_pos::Span;
use rustc::hir;
-use rustc::hir::intravisit::IdRange;
#[derive(Default)]
pub struct MoveData<'tcx> {
@@ -559,7 +558,6 @@
pub fn new(move_data: MoveData<'tcx>,
bccx: &BorrowckCtxt<'a, 'tcx>,
cfg: &cfg::CFG,
- id_range: IdRange,
body: &hir::Body)
-> FlowedMoveData<'a, 'tcx> {
let tcx = bccx.tcx;
@@ -570,7 +568,6 @@
Some(body),
cfg,
MoveDataFlowOperator,
- id_range,
move_data.moves.borrow().len());
let mut dfcx_assign =
DataFlowContext::new(tcx,
@@ -578,7 +575,6 @@
Some(body),
cfg,
AssignDataFlowOperator,
- id_range,
move_data.var_assignments.borrow().len());
move_data.add_gen_kills(bccx,
diff --git a/src/librustc_borrowck/dataflow.rs b/src/librustc_borrowck/dataflow.rs
index 56e25bd..8cf6205 100644
--- a/src/librustc_borrowck/dataflow.rs
+++ b/src/librustc_borrowck/dataflow.rs
@@ -15,7 +15,7 @@
use rustc::util::nodemap::FxHashMap;
use rustc::hir;
-use rustc::hir::intravisit::{self, IdRange};
+use rustc::hir::intravisit;
use rustc::hir::print as pprust;
@@ -230,16 +230,15 @@
body: Option<&hir::Body>,
cfg: &cfg::CFG,
oper: O,
- id_range: IdRange,
bits_per_id: usize) -> DataFlowContext<'a, 'tcx, O> {
let usize_bits = mem::size_of::<usize>() * 8;
let words_per_id = (bits_per_id + usize_bits - 1) / usize_bits;
let num_nodes = cfg.graph.all_nodes().len();
- debug!("DataFlowContext::new(analysis_name: {}, id_range={:?}, \
+ debug!("DataFlowContext::new(analysis_name: {}, \
bits_per_id={}, words_per_id={}) \
num_nodes: {}",
- analysis_name, id_range, bits_per_id, words_per_id,
+ analysis_name, bits_per_id, words_per_id,
num_nodes);
let entry = if oper.initial_value() { usize::MAX } else {0};
diff --git a/src/librustc_codegen_llvm/debuginfo/mod.rs b/src/librustc_codegen_llvm/debuginfo/mod.rs
index 2eab626..b504aa5 100644
--- a/src/librustc_codegen_llvm/debuginfo/mod.rs
+++ b/src/librustc_codegen_llvm/debuginfo/mod.rs
@@ -14,7 +14,7 @@
use llvm::debuginfo::{DIFile, DIType, DIScope, DIBuilder, DISubprogram, DIArray, DIFlags,
DILexicalBlock};
use rustc::hir::CodegenFnAttrFlags;
-use rustc::hir::def_id::{DefId, CrateNum};
+use rustc::hir::def_id::{DefId, CrateNum, LOCAL_CRATE};
use rustc::ty::subst::{Substs, UnpackedKind};
use abi::Abi;
@@ -290,9 +290,8 @@
let mut flags = DIFlags::FlagPrototyped;
- let local_id = self.tcx().hir().as_local_node_id(def_id);
- if let Some((id, _, _)) = *self.sess().entry_fn.borrow() {
- if local_id == Some(id) {
+ if let Some((id, _)) = self.tcx.entry_fn(LOCAL_CRATE) {
+ if id == def_id {
flags |= DIFlags::FlagMainSubprogram;
}
}
diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs
index f5680b2..eeb6a64 100644
--- a/src/librustc_codegen_llvm/intrinsic.rs
+++ b/src/librustc_codegen_llvm/intrinsic.rs
@@ -1,7 +1,6 @@
#![allow(non_upper_case_globals)]
use attributes;
-use intrinsics::{self, Intrinsic};
use llvm;
use llvm_util;
use abi::{Abi, FnType, LlvmType, PassMode};
@@ -658,142 +657,7 @@
return;
}
- _ => {
- let intr = match Intrinsic::find(&name) {
- Some(intr) => intr,
- None => bug!("unknown intrinsic '{}'", name),
- };
- fn one<T>(x: Vec<T>) -> T {
- assert_eq!(x.len(), 1);
- x.into_iter().next().unwrap()
- }
- fn ty_to_type<'ll>(
- cx: &CodegenCx<'ll, '_>,
- t: &intrinsics::Type
- ) -> Vec<&'ll Type> {
- use intrinsics::Type::*;
- match *t {
- Void => vec![cx.type_void()],
- Integer(_signed, _width, llvm_width) => {
- vec![cx.type_ix( llvm_width as u64)]
- }
- Float(x) => {
- match x {
- 32 => vec![cx.type_f32()],
- 64 => vec![cx.type_f64()],
- _ => bug!()
- }
- }
- Pointer(ref t, ref llvm_elem, _const) => {
- let t = llvm_elem.as_ref().unwrap_or(t);
- let elem = one(ty_to_type(cx, t));
- vec![cx.type_ptr_to(elem)]
- }
- Vector(ref t, ref llvm_elem, length) => {
- let t = llvm_elem.as_ref().unwrap_or(t);
- let elem = one(ty_to_type(cx, t));
- vec![cx.type_vector(elem, length as u64)]
- }
- Aggregate(false, ref contents) => {
- let elems = contents.iter()
- .map(|t| one(ty_to_type(cx, t)))
- .collect::<Vec<_>>();
- vec![cx.type_struct( &elems, false)]
- }
- Aggregate(true, ref contents) => {
- contents.iter()
- .flat_map(|t| ty_to_type(cx, t))
- .collect()
- }
- }
- }
-
- // This allows an argument list like `foo, (bar, baz),
- // qux` to be converted into `foo, bar, baz, qux`, integer
- // arguments to be truncated as needed and pointers to be
- // cast.
- fn modify_as_needed<'ll, 'tcx>(
- bx: &mut Builder<'_, 'll, 'tcx>,
- t: &intrinsics::Type,
- arg: &OperandRef<'tcx, &'ll Value>,
- ) -> Vec<&'ll Value> {
- match *t {
- intrinsics::Type::Aggregate(true, ref contents) => {
- // We found a tuple that needs squishing! So
- // run over the tuple and load each field.
- //
- // This assumes the type is "simple", i.e., no
- // destructors, and the contents are SIMD
- // etc.
- assert!(!bx.type_needs_drop(arg.layout.ty));
- let (ptr, align) = match arg.val {
- OperandValue::Ref(ptr, None, align) => (ptr, align),
- _ => bug!()
- };
- let arg = PlaceRef::new_sized(ptr, arg.layout, align);
- (0..contents.len()).map(|i| {
- let field = arg.project_field(bx, i);
- bx.load_operand(field).immediate()
- }).collect()
- }
- intrinsics::Type::Pointer(_, Some(ref llvm_elem), _) => {
- let llvm_elem = one(ty_to_type(bx, llvm_elem));
- vec![bx.pointercast(arg.immediate(), bx.type_ptr_to(llvm_elem))]
- }
- intrinsics::Type::Vector(_, Some(ref llvm_elem), length) => {
- let llvm_elem = one(ty_to_type(bx, llvm_elem));
- vec![
- bx.bitcast(arg.immediate(),
- bx.type_vector(llvm_elem, length as u64))
- ]
- }
- intrinsics::Type::Integer(_, width, llvm_width) if width != llvm_width => {
- // the LLVM intrinsic uses a smaller integer
- // size than the C intrinsic's signature, so
- // we have to trim it down here.
- vec![bx.trunc(arg.immediate(), bx.type_ix(llvm_width as u64))]
- }
- _ => vec![arg.immediate()],
- }
- }
-
-
- let inputs = intr.inputs.iter()
- .flat_map(|t| ty_to_type(self, t))
- .collect::<Vec<_>>();
-
- let outputs = one(ty_to_type(self, &intr.output));
-
- let llargs: Vec<_> = intr.inputs.iter().zip(args).flat_map(|(t, arg)| {
- modify_as_needed(self, t, arg)
- }).collect();
- assert_eq!(inputs.len(), llargs.len());
-
- let val = match intr.definition {
- intrinsics::IntrinsicDef::Named(name) => {
- let f = self.declare_cfn(
- name,
- self.type_func(&inputs, outputs),
- );
- self.call(f, &llargs, None)
- }
- };
-
- match *intr.output {
- intrinsics::Type::Aggregate(flatten, ref elems) => {
- // the output is a tuple so we need to munge it properly
- assert!(!flatten);
-
- for i in 0..elems.len() {
- let dest = result.project_field(self, i);
- let val = self.extract_value(val, i as u64);
- self.store(val, dest.llval, dest.align);
- }
- return;
- }
- _ => val,
- }
- }
+ _ => bug!("unknown intrinsic '{}'", name),
};
if !fn_ty.ret.is_ignore() {
diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs
index 3205348..272f34b 100644
--- a/src/librustc_codegen_llvm/lib.rs
+++ b/src/librustc_codegen_llvm/lib.rs
@@ -43,7 +43,6 @@
extern crate rustc_demangle;
extern crate rustc_incremental;
extern crate rustc_llvm;
-extern crate rustc_platform_intrinsics as intrinsics;
extern crate rustc_codegen_utils;
extern crate rustc_codegen_ssa;
extern crate rustc_fs_util;
diff --git a/src/librustc_codegen_llvm/llvm_util.rs b/src/librustc_codegen_llvm/llvm_util.rs
index ad9ebbc..dc70ebc 100644
--- a/src/librustc_codegen_llvm/llvm_util.rs
+++ b/src/librustc_codegen_llvm/llvm_util.rs
@@ -3,6 +3,7 @@
use llvm;
use rustc::session::Session;
use rustc::session::config::PrintRequest;
+use rustc_target::spec::MergeFunctions;
use libc::c_int;
use std::ffi::CString;
use syntax::feature_gate::UnstableFeatures;
@@ -61,7 +62,14 @@
add("-disable-preinline");
}
if llvm::LLVMRustIsRustLLVM() {
- add("-mergefunc-use-aliases");
+ match sess.opts.debugging_opts.merge_functions
+ .unwrap_or(sess.target.target.options.merge_functions) {
+ MergeFunctions::Disabled |
+ MergeFunctions::Trampolines => {}
+ MergeFunctions::Aliases => {
+ add("-mergefunc-use-aliases");
+ }
+ }
}
// HACK(eddyb) LLVM inserts `llvm.assume` calls to preserve align attributes
diff --git a/src/librustc_codegen_ssa/back/symbol_export.rs b/src/librustc_codegen_ssa/back/symbol_export.rs
index bf69089..c372892 100644
--- a/src/librustc_codegen_ssa/back/symbol_export.rs
+++ b/src/librustc_codegen_ssa/back/symbol_export.rs
@@ -194,7 +194,7 @@
})
.collect();
- if tcx.sess.entry_fn.borrow().is_some() {
+ if tcx.entry_fn(LOCAL_CRATE).is_some() {
let exported_symbol = ExportedSymbol::NoDefId(SymbolName::new("main"));
symbols.push((exported_symbol, SymbolExportLevel::C));
diff --git a/src/librustc_codegen_ssa/back/write.rs b/src/librustc_codegen_ssa/back/write.rs
index fb3e7ea..39bdc70 100644
--- a/src/librustc_codegen_ssa/back/write.rs
+++ b/src/librustc_codegen_ssa/back/write.rs
@@ -24,6 +24,7 @@
use rustc_data_structures::svh::Svh;
use rustc_errors::{Handler, Level, DiagnosticBuilder, FatalError, DiagnosticId};
use rustc_errors::emitter::{Emitter};
+use rustc_target::spec::MergeFunctions;
use syntax::attr;
use syntax::ext::hygiene::Mark;
use syntax_pos::MultiSpan;
@@ -152,8 +153,24 @@
sess.opts.optimize == config::OptLevel::Aggressive &&
!sess.target.target.options.is_like_emscripten;
- self.merge_functions = sess.opts.optimize == config::OptLevel::Default ||
- sess.opts.optimize == config::OptLevel::Aggressive;
+ // Some targets (namely, NVPTX) interact badly with the MergeFunctions
+ // pass. This is because MergeFunctions can generate new function calls
+ // which may interfere with the target calling convention; e.g. for the
+ // NVPTX target, PTX kernels should not call other PTX kernels.
+ // MergeFunctions can also be configured to generate aliases instead,
+ // but aliases are not supported by some backends (again, NVPTX).
+ // Therefore, allow targets to opt out of the MergeFunctions pass,
+ // but otherwise keep the pass enabled (at O2 and O3) since it can be
+ // useful for reducing code size.
+ self.merge_functions = match sess.opts.debugging_opts.merge_functions
+ .unwrap_or(sess.target.target.options.merge_functions) {
+ MergeFunctions::Disabled => false,
+ MergeFunctions::Trampolines |
+ MergeFunctions::Aliases => {
+ sess.opts.optimize == config::OptLevel::Default ||
+ sess.opts.optimize == config::OptLevel::Aggressive
+ }
+ };
}
pub fn bitcode_needed(&self) -> bool {
diff --git a/src/librustc_codegen_ssa/base.rs b/src/librustc_codegen_ssa/base.rs
index b88ec07..38caacb 100644
--- a/src/librustc_codegen_ssa/base.rs
+++ b/src/librustc_codegen_ssa/base.rs
@@ -441,10 +441,8 @@
pub fn maybe_create_entry_wrapper<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>>(
cx: &'a Bx::CodegenCx
) {
- let (main_def_id, span) = match *cx.sess().entry_fn.borrow() {
- Some((id, span, _)) => {
- (cx.tcx().hir().local_def_id(id), span)
- }
+ let (main_def_id, span) = match cx.tcx().entry_fn(LOCAL_CRATE) {
+ Some((def_id, _)) => { (def_id, cx.tcx().def_span(def_id)) },
None => return,
};
@@ -458,7 +456,7 @@
let main_llfn = cx.get_fn(instance);
- let et = cx.sess().entry_fn.get().map(|e| e.2);
+ let et = cx.tcx().entry_fn(LOCAL_CRATE).map(|e| e.1);
match et {
Some(EntryFnType::Main) => create_entry_fn::<Bx>(cx, span, main_llfn, main_def_id, true),
Some(EntryFnType::Start) => create_entry_fn::<Bx>(cx, span, main_llfn, main_def_id, false),
diff --git a/src/librustc_codegen_utils/lib.rs b/src/librustc_codegen_utils/lib.rs
index b59bca0..5f61852 100644
--- a/src/librustc_codegen_utils/lib.rs
+++ b/src/librustc_codegen_utils/lib.rs
@@ -31,6 +31,7 @@
#[macro_use] extern crate rustc_data_structures;
use rustc::ty::TyCtxt;
+use rustc::hir::def_id::LOCAL_CRATE;
pub mod link;
pub mod codegen_backend;
@@ -42,11 +43,9 @@
/// that actually test that compilation succeeds without
/// reporting an error.
pub fn check_for_rustc_errors_attr(tcx: TyCtxt) {
- if let Some((id, span, _)) = *tcx.sess.entry_fn.borrow() {
- let main_def_id = tcx.hir().local_def_id(id);
-
- if tcx.has_attr(main_def_id, "rustc_error") {
- tcx.sess.span_fatal(span, "compilation successful");
+ if let Some((def_id, _)) = tcx.entry_fn(LOCAL_CRATE) {
+ if tcx.has_attr(def_id, "rustc_error") {
+ tcx.sess.span_fatal(tcx.def_span(def_id), "compilation successful");
}
}
}
diff --git a/src/librustc_data_structures/sync.rs b/src/librustc_data_structures/sync.rs
index f9f94f0..0253eef 100644
--- a/src/librustc_data_structures/sync.rs
+++ b/src/librustc_data_structures/sync.rs
@@ -70,6 +70,7 @@
pub struct Atomic<T: Copy>(Cell<T>);
impl<T: Copy> Atomic<T> {
+ #[inline]
pub fn new(v: T) -> Self {
Atomic(Cell::new(v))
}
@@ -80,10 +81,12 @@
self.0.into_inner()
}
+ #[inline]
pub fn load(&self, _: Ordering) -> T {
self.0.get()
}
+ #[inline]
pub fn store(&self, val: T, _: Ordering) {
self.0.set(val)
}
@@ -118,6 +121,7 @@
pub type AtomicUsize = Atomic<usize>;
pub type AtomicBool = Atomic<bool>;
+ pub type AtomicU32 = Atomic<u32>;
pub type AtomicU64 = Atomic<u64>;
pub use self::serial_join as join;
@@ -223,7 +227,7 @@
pub use parking_lot::MutexGuard as LockGuard;
pub use parking_lot::MappedMutexGuard as MappedLockGuard;
- pub use std::sync::atomic::{AtomicBool, AtomicUsize, AtomicU64};
+ pub use std::sync::atomic::{AtomicBool, AtomicUsize, AtomicU32, AtomicU64};
pub use std::sync::Arc as Lrc;
pub use std::sync::Weak as Weak;
diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs
index 3b7de37..d23d8b8 100644
--- a/src/librustc_driver/driver.rs
+++ b/src/librustc_driver/driver.rs
@@ -26,7 +26,7 @@
use rustc_plugin as plugin;
use rustc_plugin::registry::Registry;
use rustc_privacy;
-use rustc_resolve::{MakeGlobMap, Resolver, ResolverArenas};
+use rustc_resolve::{Resolver, ResolverArenas};
use rustc_traits;
use rustc_typeck as typeck;
use syntax::{self, ast, attr, diagnostics, visit};
@@ -168,7 +168,6 @@
let ExpansionResult {
expanded_crate,
defs,
- analysis,
resolutions,
mut hir_forest,
} = {
@@ -179,7 +178,6 @@
registry,
&crate_name,
addl_plugins,
- control.make_glob_map,
|expanded_crate| {
let mut state = CompileState::state_after_expand(
input,
@@ -252,7 +250,6 @@
output,
&cstore,
&hir_map,
- &analysis,
&resolutions,
&expanded_crate,
&hir_map.krate(),
@@ -278,12 +275,11 @@
sess,
cstore,
hir_map,
- analysis,
resolutions,
&mut arenas,
&crate_name,
&outputs,
- |tcx, analysis, rx, result| {
+ |tcx, rx, result| {
{
// Eventually, we will want to track plugins.
tcx.dep_graph.with_ignore(|| {
@@ -294,7 +290,6 @@
output,
opt_crate,
tcx.hir().krate(),
- &analysis,
tcx,
&crate_name,
);
@@ -394,7 +389,6 @@
// FIXME we probably want to group the below options together and offer a
// better API, rather than this ad-hoc approach.
- pub make_glob_map: MakeGlobMap,
// Whether the compiler should keep the ast beyond parsing.
pub keep_ast: bool,
// -Zcontinue-parse-after-error
@@ -417,7 +411,6 @@
after_hir_lowering: PhaseController::basic(),
after_analysis: PhaseController::basic(),
compilation_done: PhaseController::basic(),
- make_glob_map: MakeGlobMap::No,
keep_ast: false,
continue_parse_after_error: false,
provide: box |_| {},
@@ -530,7 +523,6 @@
pub hir_crate: Option<&'a hir::Crate>,
pub hir_map: Option<&'a hir_map::Map<'tcx>>,
pub resolutions: Option<&'a Resolutions>,
- pub analysis: Option<&'a ty::CrateAnalysis>,
pub tcx: Option<TyCtxt<'a, 'tcx, 'tcx>>,
}
@@ -550,7 +542,6 @@
hir_crate: None,
hir_map: None,
resolutions: None,
- analysis: None,
tcx: None,
}
}
@@ -598,7 +589,6 @@
out_file: &'a Option<PathBuf>,
cstore: &'tcx CStore,
hir_map: &'a hir_map::Map<'tcx>,
- analysis: &'a ty::CrateAnalysis,
resolutions: &'a Resolutions,
krate: &'a ast::Crate,
hir_crate: &'a hir::Crate,
@@ -609,7 +599,6 @@
crate_name: Some(crate_name),
cstore: Some(cstore),
hir_map: Some(hir_map),
- analysis: Some(analysis),
resolutions: Some(resolutions),
expanded_crate: Some(krate),
hir_crate: Some(hir_crate),
@@ -626,12 +615,10 @@
out_file: &'a Option<PathBuf>,
krate: Option<&'a ast::Crate>,
hir_crate: &'a hir::Crate,
- analysis: &'a ty::CrateAnalysis,
tcx: TyCtxt<'a, 'tcx, 'tcx>,
crate_name: &'a str,
) -> Self {
CompileState {
- analysis: Some(analysis),
tcx: Some(tcx),
expanded_crate: krate,
hir_crate: Some(hir_crate),
@@ -714,7 +701,6 @@
pub struct ExpansionResult {
pub expanded_crate: ast::Crate,
pub defs: hir_map::Definitions,
- pub analysis: ty::CrateAnalysis,
pub resolutions: Resolutions,
pub hir_forest: hir_map::Forest,
}
@@ -739,7 +725,6 @@
registry: Option<Registry>,
crate_name: &str,
addl_plugins: Option<Vec<String>>,
- make_glob_map: MakeGlobMap,
after_expand: F,
) -> Result<ExpansionResult, CompileIncomplete>
where
@@ -759,7 +744,6 @@
registry,
crate_name,
addl_plugins,
- make_glob_map,
&resolver_arenas,
&mut crate_loader,
after_expand,
@@ -777,20 +761,13 @@
freevars: resolver.freevars,
export_map: resolver.export_map,
trait_map: resolver.trait_map,
+ glob_map: resolver.glob_map,
maybe_unused_trait_imports: resolver.maybe_unused_trait_imports,
maybe_unused_extern_crates: resolver.maybe_unused_extern_crates,
extern_prelude: resolver.extern_prelude.iter().map(|(ident, entry)| {
(ident.name, entry.introduced_by_item)
}).collect(),
},
-
- analysis: ty::CrateAnalysis {
- glob_map: if resolver.make_glob_map {
- Some(resolver.glob_map)
- } else {
- None
- },
- },
}),
Err(x) => Err(x),
}
@@ -805,7 +782,6 @@
registry: Option<Registry>,
crate_name: &str,
addl_plugins: Option<Vec<String>>,
- make_glob_map: MakeGlobMap,
resolver_arenas: &'a ResolverArenas<'a>,
crate_loader: &'a mut CrateLoader<'a>,
after_expand: F,
@@ -937,7 +913,6 @@
cstore,
&krate,
crate_name,
- make_glob_map,
crate_loader,
&resolver_arenas,
);
@@ -1070,15 +1045,6 @@
)
});
- // Add all buffered lints from the `ParseSess` to the `Session`.
- sess.parse_sess.buffered_lints.with_lock(|buffered_lints| {
- info!("{} parse sess buffered_lints", buffered_lints.len());
- for BufferedEarlyLint{id, span, msg, lint_id} in buffered_lints.drain(..) {
- let lint = lint::Lint::from_parser_lint_id(lint_id);
- sess.buffer_lint(lint, id, span, &msg);
- }
- });
-
// Done with macro expansion!
after_expand(&krate)?;
@@ -1114,6 +1080,15 @@
);
});
+ // Add all buffered lints from the `ParseSess` to the `Session`.
+ sess.parse_sess.buffered_lints.with_lock(|buffered_lints| {
+ info!("{} parse sess buffered_lints", buffered_lints.len());
+ for BufferedEarlyLint{id, span, msg, lint_id} in buffered_lints.drain(..) {
+ let lint = lint::Lint::from_parser_lint_id(lint_id);
+ sess.buffer_lint(lint, id, span, &msg);
+ }
+ });
+
// Lower ast -> hir.
// First, we need to collect the dep_graph.
let dep_graph = match future_dep_graph {
@@ -1170,10 +1145,13 @@
ty::provide(providers);
traits::provide(providers);
stability::provide(providers);
+ middle::intrinsicck::provide(providers);
+ middle::liveness::provide(providers);
reachable::provide(providers);
rustc_passes::provide(providers);
rustc_traits::provide(providers);
middle::region::provide(providers);
+ middle::entry::provide(providers);
cstore::provide(providers);
lint::provide(providers);
}
@@ -1191,7 +1169,6 @@
sess: &'tcx Session,
cstore: &'tcx CStore,
hir_map: hir_map::Map<'tcx>,
- analysis: ty::CrateAnalysis,
resolutions: Resolutions,
arenas: &'tcx mut AllArenas<'tcx>,
name: &str,
@@ -1201,7 +1178,6 @@
where
F: for<'a> FnOnce(
TyCtxt<'a, 'tcx, 'tcx>,
- ty::CrateAnalysis,
mpsc::Receiver<Box<dyn Any + Send>>,
CompileResult,
) -> R,
@@ -1210,10 +1186,6 @@
rustc_incremental::load_query_result_cache(sess)
});
- time(sess, "looking for entry point", || {
- middle::entry::find_entry_point(sess, &hir_map, name)
- });
-
let mut local_providers = ty::query::Providers::default();
default_provide(&mut local_providers);
codegen_backend.provide(&mut local_providers);
@@ -1243,6 +1215,10 @@
// tcx available.
time(sess, "dep graph tcx init", || rustc_incremental::dep_graph_tcx_init(tcx));
+ time(sess, "looking for entry point", || {
+ middle::entry::find_entry_point(tcx)
+ });
+
time(sess, "looking for plugin registrar", || {
plugin::build::find_plugin_registrar(tcx)
});
@@ -1265,7 +1241,7 @@
match typeck::check_crate(tcx) {
Ok(x) => x,
Err(x) => {
- f(tcx, analysis, rx, Err(x));
+ f(tcx, rx, Err(x));
return Err(x);
}
}
@@ -1318,7 +1294,7 @@
// lint warnings and so on -- kindck used to do this abort, but
// kindck is gone now). -nmatsakis
if sess.err_count() > 0 {
- return Ok(f(tcx, analysis, rx, sess.compile_status()));
+ return Ok(f(tcx, rx, sess.compile_status()));
}
time(sess, "death checking", || middle::dead::check_crate(tcx));
@@ -1329,7 +1305,7 @@
time(sess, "lint checking", || lint::check_crate(tcx));
- return Ok(f(tcx, analysis, rx, tcx.sess.compile_status()));
+ return Ok(f(tcx, rx, tcx.sess.compile_status()));
},
)
}
@@ -1530,13 +1506,7 @@
}
None
}
- None => {
- session
- .struct_span_err(a.span, "`crate_type` requires a value")
- .note("for example: `#![crate_type=\"lib\"]`")
- .emit();
- None
- }
+ None => None
}
} else {
None
diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs
index 889e1ec..c8a5bbe 100644
--- a/src/librustc_driver/lib.rs
+++ b/src/librustc_driver/lib.rs
@@ -57,7 +57,6 @@
use driver::CompileController;
use pretty::{PpMode, UserIdentifiedItem};
-use rustc_resolve as resolve;
use rustc_save_analysis as save;
use rustc_save_analysis::DumpHandler;
use rustc_data_structures::sync::{self, Lrc, Ordering::SeqCst};
@@ -880,7 +879,6 @@
pretty::print_after_hir_lowering(state.session,
state.cstore.unwrap(),
state.hir_map.unwrap(),
- state.analysis.unwrap(),
state.resolutions.unwrap(),
state.input,
&state.expanded_crate.take().unwrap(),
@@ -941,7 +939,6 @@
time(state.session, "save analysis", || {
save::process_crate(state.tcx.unwrap(),
state.expanded_crate.unwrap(),
- state.analysis.unwrap(),
state.crate_name.unwrap(),
state.input,
None,
@@ -950,7 +947,6 @@
});
};
control.after_analysis.run_callback_on_error = true;
- control.make_glob_map = resolve::MakeGlobMap::Yes;
}
impl RustcDefaultCalls {
diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs
index a9ec993..d980c5a 100644
--- a/src/librustc_driver/pretty.rs
+++ b/src/librustc_driver/pretty.rs
@@ -123,7 +123,8 @@
sess.fatal(&format!("argument to `unpretty` must be one of `normal`, \
`expanded`, `flowgraph[,unlabelled]=<nodeid>`, \
`identified`, `expanded,identified`, `everybody_loops`, \
- `hir`, `hir,identified`, `hir,typed`, or `mir`; got {}",
+ `hir`, `hir,identified`, `hir,typed`, `hir-tree`, \
+ `mir` or `mir-cfg`; got {}",
name));
} else {
sess.fatal(&format!("argument to `pretty` must be one of `normal`, `expanded`, \
@@ -190,7 +191,6 @@
sess: &'tcx Session,
cstore: &'tcx CStore,
hir_map: &hir_map::Map<'tcx>,
- analysis: &ty::CrateAnalysis,
resolutions: &Resolutions,
output_filenames: &OutputFilenames,
id: &str,
@@ -223,12 +223,11 @@
sess,
cstore,
hir_map.clone(),
- analysis.clone(),
resolutions.clone(),
&mut arenas,
id,
output_filenames,
- |tcx, _, _, _| {
+ |tcx, _, _| {
let empty_tables = ty::TypeckTables::empty(None);
let annotation = TypedAnnotation {
tcx,
@@ -959,7 +958,6 @@
pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session,
cstore: &'tcx CStore,
hir_map: &hir_map::Map<'tcx>,
- analysis: &ty::CrateAnalysis,
resolutions: &Resolutions,
input: &Input,
krate: &ast::Crate,
@@ -972,7 +970,6 @@
print_with_analysis(sess,
cstore,
hir_map,
- analysis,
resolutions,
crate_name,
output_filenames,
@@ -1010,7 +1007,6 @@
s.call_with_pp_support_hir(sess,
cstore,
hir_map,
- analysis,
resolutions,
output_filenames,
crate_name,
@@ -1033,7 +1029,6 @@
s.call_with_pp_support_hir(sess,
cstore,
hir_map,
- analysis,
resolutions,
output_filenames,
crate_name,
@@ -1048,7 +1043,6 @@
s.call_with_pp_support_hir(sess,
cstore,
hir_map,
- analysis,
resolutions,
output_filenames,
crate_name,
@@ -1081,7 +1075,6 @@
s.call_with_pp_support_hir(sess,
cstore,
hir_map,
- analysis,
resolutions,
output_filenames,
crate_name,
@@ -1103,13 +1096,12 @@
}
// In an ideal world, this would be a public function called by the driver after
-// analsysis is performed. However, we want to call `phase_3_run_analysis_passes`
+// analysis is performed. However, we want to call `phase_3_run_analysis_passes`
// with a different callback than the standard driver, so that isn't easy.
// Instead, we call that function ourselves.
fn print_with_analysis<'tcx, 'a: 'tcx>(sess: &'a Session,
cstore: &'a CStore,
hir_map: &hir_map::Map<'tcx>,
- analysis: &ty::CrateAnalysis,
resolutions: &Resolutions,
crate_name: &str,
output_filenames: &OutputFilenames,
@@ -1134,12 +1126,11 @@
sess,
cstore,
hir_map.clone(),
- analysis.clone(),
resolutions.clone(),
&mut arenas,
crate_name,
output_filenames,
- |tcx, _, _, _| {
+ |tcx, _, _| {
match ppm {
PpmMir | PpmMirCFG => {
if let Some(nodeid) = nodeid {
diff --git a/src/librustc_driver/test.rs b/src/librustc_driver/test.rs
index 9c027f1..afcf086 100644
--- a/src/librustc_driver/test.rs
+++ b/src/librustc_driver/test.rs
@@ -18,7 +18,6 @@
use rustc_data_structures::sync::{self, Lrc};
use rustc_lint;
use rustc_metadata::cstore::CStore;
-use rustc_resolve::MakeGlobMap;
use rustc_target::spec::abi::Abi;
use syntax;
use syntax::ast;
@@ -134,7 +133,6 @@
None,
"test",
None,
- MakeGlobMap::No,
|_| Ok(()),
).expect("phase 2 aborted")
};
diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs
index a074441..3e25f98 100644
--- a/src/librustc_errors/lib.rs
+++ b/src/librustc_errors/lib.rs
@@ -135,10 +135,11 @@
if let Some(line) = line_opt {
if let Some(lo) = line.char_indices().map(|(i, _)| i).nth(lo) {
let hi_opt = hi_opt.and_then(|hi| line.char_indices().map(|(i, _)| i).nth(hi));
- buf.push_str(match hi_opt {
- Some(hi) => &line[lo..hi],
- None => &line[lo..],
- });
+ match hi_opt {
+ Some(hi) if hi > lo => buf.push_str(&line[lo..hi]),
+ Some(_) => (),
+ None => buf.push_str(&line[lo..]),
+ }
}
if let None = hi_opt {
buf.push('\n');
diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs
index 72bcf8e..f6c381f 100644
--- a/src/librustc_lint/builtin.rs
+++ b/src/librustc_lint/builtin.rs
@@ -35,14 +35,15 @@
use syntax::attr;
use syntax::source_map::Spanned;
use syntax::edition::Edition;
-use syntax::feature_gate::{AttributeGate, AttributeType, Stability, deprecated_attributes};
+use syntax::feature_gate::{AttributeGate, AttributeTemplate, AttributeType};
+use syntax::feature_gate::{Stability, deprecated_attributes};
use syntax_pos::{BytePos, Span, SyntaxContext};
use syntax::symbol::keywords;
use syntax::errors::{Applicability, DiagnosticBuilder};
use syntax::print::pprust::expr_to_string;
+use syntax::visit::FnKind;
use rustc::hir::{self, GenericParamKind, PatKind};
-use rustc::hir::intravisit::FnKind;
use nonstandard_style::{MethodLateContext, method_context};
@@ -216,7 +217,7 @@
}
impl UnsafeCode {
- fn report_unsafe(&self, cx: &LateContext, span: Span, desc: &'static str) {
+ fn report_unsafe(&self, cx: &EarlyContext, span: Span, desc: &'static str) {
// This comes from a macro that has #[allow_internal_unsafe].
if span.allows_unsafe() {
return;
@@ -226,23 +227,31 @@
}
}
-impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnsafeCode {
- fn check_expr(&mut self, cx: &LateContext, e: &hir::Expr) {
- if let hir::ExprKind::Block(ref blk, _) = e.node {
+impl EarlyLintPass for UnsafeCode {
+ fn check_attribute(&mut self, cx: &EarlyContext, attr: &ast::Attribute) {
+ if attr.check_name("allow_internal_unsafe") {
+ self.report_unsafe(cx, attr.span, "`allow_internal_unsafe` allows defining \
+ macros using unsafe without triggering \
+ the `unsafe_code` lint at their call site");
+ }
+ }
+
+ fn check_expr(&mut self, cx: &EarlyContext, e: &ast::Expr) {
+ if let ast::ExprKind::Block(ref blk, _) = e.node {
// Don't warn about generated blocks, that'll just pollute the output.
- if blk.rules == hir::UnsafeBlock(hir::UserProvided) {
+ if blk.rules == ast::BlockCheckMode::Unsafe(ast::UserProvided) {
self.report_unsafe(cx, blk.span, "usage of an `unsafe` block");
}
}
}
- fn check_item(&mut self, cx: &LateContext, it: &hir::Item) {
+ fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) {
match it.node {
- hir::ItemKind::Trait(_, hir::Unsafety::Unsafe, ..) => {
+ ast::ItemKind::Trait(_, ast::Unsafety::Unsafe, ..) => {
self.report_unsafe(cx, it.span, "declaration of an `unsafe` trait")
}
- hir::ItemKind::Impl(hir::Unsafety::Unsafe, ..) => {
+ ast::ItemKind::Impl(ast::Unsafety::Unsafe, ..) => {
self.report_unsafe(cx, it.span, "implementation of an `unsafe` trait")
}
@@ -251,19 +260,18 @@
}
fn check_fn(&mut self,
- cx: &LateContext,
- fk: FnKind<'tcx>,
- _: &hir::FnDecl,
- _: &hir::Body,
+ cx: &EarlyContext,
+ fk: FnKind,
+ _: &ast::FnDecl,
span: Span,
_: ast::NodeId) {
match fk {
- FnKind::ItemFn(_, _, hir::FnHeader { unsafety: hir::Unsafety::Unsafe, .. }, ..) => {
+ FnKind::ItemFn(_, ast::FnHeader { unsafety: ast::Unsafety::Unsafe, .. }, ..) => {
self.report_unsafe(cx, span, "declaration of an `unsafe` function")
}
FnKind::Method(_, sig, ..) => {
- if sig.header.unsafety == hir::Unsafety::Unsafe {
+ if sig.header.unsafety == ast::Unsafety::Unsafe {
self.report_unsafe(cx, span, "implementation of an `unsafe` method")
}
}
@@ -272,9 +280,9 @@
}
}
- fn check_trait_item(&mut self, cx: &LateContext, item: &hir::TraitItem) {
- if let hir::TraitItemKind::Method(ref sig, hir::TraitMethod::Required(_)) = item.node {
- if sig.header.unsafety == hir::Unsafety::Unsafe {
+ fn check_trait_item(&mut self, cx: &EarlyContext, item: &ast::TraitItem) {
+ if let ast::TraitItemKind::Method(ref sig, None) = item.node {
+ if sig.header.unsafety == ast::Unsafety::Unsafe {
self.report_unsafe(cx, item.span, "declaration of an `unsafe` method")
}
}
@@ -682,86 +690,12 @@
}
}
-/// Checks for incorrect use of `repr` attributes.
-#[derive(Clone)]
-pub struct BadRepr;
-
-impl LintPass for BadRepr {
- fn get_lints(&self) -> LintArray {
- lint_array!()
- }
-}
-
-impl EarlyLintPass for BadRepr {
- fn check_attribute(&mut self, cx: &EarlyContext, attr: &ast::Attribute) {
- if attr.name() == "repr" {
- let list = attr.meta_item_list();
-
- let repr_str = |lit: &str| { format!("#[repr({})]", lit) };
-
- // Emit warnings with `repr` either has a literal assignment (`#[repr = "C"]`) or
- // no hints (``#[repr]`)
- let has_hints = list.as_ref().map(|ref list| !list.is_empty()).unwrap_or(false);
- if !has_hints {
- let mut suggested = false;
- let mut warn = if let Some(ref lit) = attr.value_str() {
- // avoid warning about empty `repr` on `#[repr = "foo"]`
- let mut warn = cx.struct_span_lint(
- BAD_REPR,
- attr.span,
- "`repr` attribute isn't configurable with a literal",
- );
- match lit.to_string().as_ref() {
- | "C" | "packed" | "rust" | "transparent"
- | "u8" | "u16" | "u32" | "u64" | "u128" | "usize"
- | "i8" | "i16" | "i32" | "i64" | "i128" | "isize" => {
- // if the literal could have been a valid `repr` arg,
- // suggest the correct syntax
- warn.span_suggestion_with_applicability(
- attr.span,
- "give `repr` a hint",
- repr_str(&lit.as_str()),
- Applicability::MachineApplicable
- );
- suggested = true;
- }
- _ => { // the literal wasn't a valid `repr` arg
- warn.span_label(attr.span, "needs a hint");
- }
- };
- warn
- } else {
- let mut warn = cx.struct_span_lint(
- BAD_REPR,
- attr.span,
- "`repr` attribute must have a hint",
- );
- warn.span_label(attr.span, "needs a hint");
- warn
- };
- if !suggested {
- warn.help(&format!(
- "valid hints include `{}`, `{}`, `{}` and `{}`",
- repr_str("C"),
- repr_str("packed"),
- repr_str("rust"),
- repr_str("transparent"),
- ));
- warn.note("for more information, visit \
- <https://doc.rust-lang.org/reference/type-layout.html>");
- }
- warn.emit();
- }
- }
- }
-}
-
/// Checks for use of attributes which have been deprecated.
#[derive(Clone)]
pub struct DeprecatedAttr {
// This is not free to compute, so we want to keep it around, rather than
// compute it for every attribute.
- depr_attrs: Vec<&'static (&'static str, AttributeType, AttributeGate)>,
+ depr_attrs: Vec<&'static (&'static str, AttributeType, AttributeTemplate, AttributeGate)>,
}
impl DeprecatedAttr {
@@ -780,7 +714,7 @@
impl EarlyLintPass for DeprecatedAttr {
fn check_attribute(&mut self, cx: &EarlyContext, attr: &ast::Attribute) {
- for &&(n, _, ref g) in &self.depr_attrs {
+ for &&(n, _, _, ref g) in &self.depr_attrs {
if attr.name() == n {
if let &AttributeGate::Gated(Stability::Deprecated(link, suggestion),
ref name,
@@ -1540,7 +1474,7 @@
_ => {},
}
TokenTree::Delimited(_, _, tts) => {
- self.check_tokens(cx, tts.stream())
+ self.check_tokens(cx, tts)
},
}
}
diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs
index 4dfb664..71c859d 100644
--- a/src/librustc_lint/lib.rs
+++ b/src/librustc_lint/lib.rs
@@ -48,7 +48,8 @@
INTRA_DOC_LINK_RESOLUTION_FAILURE,
MISSING_DOC_CODE_EXAMPLES,
PRIVATE_DOC_TESTS,
- parser::QUESTION_MARK_MACRO_SEP
+ parser::QUESTION_MARK_MACRO_SEP,
+ parser::ILL_FORMED_ATTRIBUTE_INPUT,
};
use rustc::session;
use rustc::util;
@@ -111,9 +112,9 @@
add_early_builtin!(sess,
UnusedParens,
UnusedImportBraces,
+ UnsafeCode,
AnonymousParameters,
UnusedDocComment,
- BadRepr,
EllipsisInclusiveRangePatterns,
NonCamelCaseTypes,
);
@@ -134,7 +135,6 @@
NonSnakeCase: NonSnakeCase,
NonUpperCaseGlobals: NonUpperCaseGlobals,
NonShorthandFieldPatterns: NonShorthandFieldPatterns,
- UnsafeCode: UnsafeCode,
UnusedAllocation: UnusedAllocation,
MissingCopyImplementations: MissingCopyImplementations,
UnstableFeatures: UnstableFeatures,
@@ -336,6 +336,16 @@
reference: "issue #52234 <https://github.com/rust-lang/rust/issues/52234>",
edition: None,
},
+ FutureIncompatibleInfo {
+ id: LintId::of(ILL_FORMED_ATTRIBUTE_INPUT),
+ reference: "issue #57571 <https://github.com/rust-lang/rust/issues/57571>",
+ edition: None,
+ },
+ FutureIncompatibleInfo {
+ id: LintId::of(AMBIGUOUS_ASSOCIATED_ITEMS),
+ reference: "issue #57644 <https://github.com/rust-lang/rust/issues/57644>",
+ edition: None,
+ },
]);
// Register renamed and removed lints.
@@ -385,4 +395,6 @@
"no longer a warning, #[no_mangle] functions always exported");
store.register_removed("private_no_mangle_statics",
"no longer a warning, #[no_mangle] statics always exported");
+ store.register_removed("bad_repr",
+ "replaced with a generic attribute input check");
}
diff --git a/src/librustc_lint/unused.rs b/src/librustc_lint/unused.rs
index 205f894..bc29020 100644
--- a/src/librustc_lint/unused.rs
+++ b/src/librustc_lint/unused.rs
@@ -232,7 +232,7 @@
fn check_attribute(&mut self, cx: &LateContext, attr: &ast::Attribute) {
debug!("checking attribute: {:?}", attr);
// Note that check_name() marks the attribute as used if it matches.
- for &(ref name, ty, _) in BUILTIN_ATTRIBUTES {
+ for &(name, ty, ..) in BUILTIN_ATTRIBUTES {
match ty {
AttributeType::Whitelisted if attr.check_name(name) => {
debug!("{:?} is Whitelisted", name);
@@ -256,7 +256,7 @@
cx.span_lint(UNUSED_ATTRIBUTES, attr.span, "unused attribute");
// Is it a builtin attribute that must be used at the crate level?
let known_crate = BUILTIN_ATTRIBUTES.iter()
- .find(|&&(builtin, ty, _)| name == builtin && ty == AttributeType::CrateLevel)
+ .find(|&&(builtin, ty, ..)| name == builtin && ty == AttributeType::CrateLevel)
.is_some();
// Has a plugin registered this attribute as one that must be used at
diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs
index dc8db5b..1f07e8f 100644
--- a/src/librustc_metadata/decoder.rs
+++ b/src/librustc_metadata/decoder.rs
@@ -418,6 +418,7 @@
EntryKind::Mod(_) => Def::Mod(did),
EntryKind::Variant(_) => Def::Variant(did),
EntryKind::Trait(_) => Def::Trait(did),
+ EntryKind::TraitAlias(_) => Def::TraitAlias(did),
EntryKind::Enum(..) => Def::Enum(did),
EntryKind::MacroDef(_) => Def::Macro(did, MacroKind::Bang),
EntryKind::ForeignType => Def::ForeignTy(did),
@@ -520,17 +521,26 @@
}
pub fn get_trait_def(&self, item_id: DefIndex, sess: &Session) -> ty::TraitDef {
- let data = match self.entry(item_id).kind {
- EntryKind::Trait(data) => data.decode((self, sess)),
- _ => bug!(),
- };
-
- ty::TraitDef::new(self.local_def_id(item_id),
- data.unsafety,
- data.paren_sugar,
- data.has_auto_impl,
- data.is_marker,
- self.def_path_table.def_path_hash(item_id))
+ match self.entry(item_id).kind {
+ EntryKind::Trait(data) => {
+ let data = data.decode((self, sess));
+ ty::TraitDef::new(self.local_def_id(item_id),
+ data.unsafety,
+ data.paren_sugar,
+ data.has_auto_impl,
+ data.is_marker,
+ self.def_path_table.def_path_hash(item_id))
+ },
+ EntryKind::TraitAlias(_) => {
+ ty::TraitDef::new(self.local_def_id(item_id),
+ hir::Unsafety::Normal,
+ false,
+ false,
+ false,
+ self.def_path_table.def_path_hash(item_id))
+ },
+ _ => bug!("def-index does not refer to trait or trait alias"),
+ }
}
fn get_variant(&self,
@@ -615,10 +625,13 @@
item_id: DefIndex,
tcx: TyCtxt<'a, 'tcx, 'tcx>)
-> ty::GenericPredicates<'tcx> {
- match self.entry(item_id).kind {
- EntryKind::Trait(data) => data.decode(self).super_predicates.decode((self, tcx)),
- _ => bug!(),
- }
+ let super_predicates = match self.entry(item_id).kind {
+ EntryKind::Trait(data) => data.decode(self).super_predicates,
+ EntryKind::TraitAlias(data) => data.decode(self).super_predicates,
+ _ => bug!("def-index does not refer to trait or trait alias"),
+ };
+
+ super_predicates.decode((self, tcx))
}
pub fn get_generics(&self,
@@ -1014,7 +1027,8 @@
}
def_key.parent.and_then(|parent_index| {
match self.entry(parent_index).kind {
- EntryKind::Trait(_) => Some(self.local_def_id(parent_index)),
+ EntryKind::Trait(_) |
+ EntryKind::TraitAlias(_) => Some(self.local_def_id(parent_index)),
_ => None,
}
})
diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs
index 2de1637..afb0218 100644
--- a/src/librustc_metadata/encoder.rs
+++ b/src/librustc_metadata/encoder.rs
@@ -1128,8 +1128,7 @@
EntryKind::Impl(self.lazy(&data))
}
- hir::ItemKind::Trait(..) |
- hir::ItemKind::TraitAlias(..) => {
+ hir::ItemKind::Trait(..) => {
let trait_def = tcx.trait_def(def_id);
let data = TraitData {
unsafety: trait_def.unsafety,
@@ -1141,6 +1140,13 @@
EntryKind::Trait(self.lazy(&data))
}
+ hir::ItemKind::TraitAlias(..) => {
+ let data = TraitAliasData {
+ super_predicates: self.lazy(&tcx.super_predicates_of(def_id)),
+ };
+
+ EntryKind::TraitAlias(self.lazy(&data))
+ }
hir::ItemKind::ExternCrate(_) |
hir::ItemKind::Use(..) => bug!("cannot encode info for item {:?}", item),
};
@@ -1214,6 +1220,7 @@
hir::ItemKind::Impl(..) |
hir::ItemKind::Existential(..) |
hir::ItemKind::Trait(..) => Some(self.encode_generics(def_id)),
+ hir::ItemKind::TraitAlias(..) => Some(self.encode_generics(def_id)),
_ => None,
},
predicates: match item.node {
@@ -1226,7 +1233,8 @@
hir::ItemKind::Union(..) |
hir::ItemKind::Impl(..) |
hir::ItemKind::Existential(..) |
- hir::ItemKind::Trait(..) => Some(self.encode_predicates(def_id)),
+ hir::ItemKind::Trait(..) |
+ hir::ItemKind::TraitAlias(..) => Some(self.encode_predicates(def_id)),
_ => None,
},
@@ -1236,7 +1244,8 @@
// hack. (No reason not to expand it in the future if
// necessary.)
predicates_defined_on: match item.node {
- hir::ItemKind::Trait(..) => Some(self.encode_predicates_defined_on(def_id)),
+ hir::ItemKind::Trait(..) |
+ hir::ItemKind::TraitAlias(..) => Some(self.encode_predicates_defined_on(def_id)),
_ => None, // not *wrong* for other kinds of items, but not needed
},
diff --git a/src/librustc_metadata/native_libs.rs b/src/librustc_metadata/native_libs.rs
index d35d649..1f00086 100644
--- a/src/librustc_metadata/native_libs.rs
+++ b/src/librustc_metadata/native_libs.rs
@@ -163,7 +163,7 @@
!self.tcx.features().static_nobundle {
feature_gate::emit_feature_err(&self.tcx.sess.parse_sess,
"static_nobundle",
- span.unwrap(),
+ span.unwrap_or_else(|| syntax_pos::DUMMY_SP),
GateIssue::Language,
"kind=\"static-nobundle\" is feature gated");
}
diff --git a/src/librustc_metadata/schema.rs b/src/librustc_metadata/schema.rs
index 25f499b..f3ff974 100644
--- a/src/librustc_metadata/schema.rs
+++ b/src/librustc_metadata/schema.rs
@@ -316,6 +316,7 @@
AssociatedType(AssociatedContainer),
AssociatedExistential(AssociatedContainer),
AssociatedConst(AssociatedContainer, ConstQualif, Lazy<RenderedConst>),
+ TraitAlias(Lazy<TraitAliasData<'tcx>>),
}
impl<'a, 'gcx> HashStable<StableHashingContext<'a>> for EntryKind<'gcx> {
@@ -370,6 +371,9 @@
EntryKind::Trait(ref trait_data) => {
trait_data.hash_stable(hcx, hasher);
}
+ EntryKind::TraitAlias(ref trait_alias_data) => {
+ trait_alias_data.hash_stable(hcx, hasher);
+ }
EntryKind::Impl(ref impl_data) => {
impl_data.hash_stable(hcx, hasher);
}
@@ -475,6 +479,15 @@
});
#[derive(RustcEncodable, RustcDecodable)]
+pub struct TraitAliasData<'tcx> {
+ pub super_predicates: Lazy<ty::GenericPredicates<'tcx>>,
+}
+
+impl_stable_hash_for!(struct TraitAliasData<'tcx> {
+ super_predicates
+});
+
+#[derive(RustcEncodable, RustcDecodable)]
pub struct ImplData<'tcx> {
pub polarity: hir::ImplPolarity,
pub defaultness: hir::Defaultness,
diff --git a/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/mod.rs b/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/mod.rs
index 77c8a89..2a858bd 100644
--- a/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/mod.rs
+++ b/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/mod.rs
@@ -505,7 +505,7 @@
) {
let mut diag = infcx.tcx.sess.struct_span_err(
span,
- "unsatisfied lifetime constraints", // FIXME
+ "lifetime may not live long enough"
);
let counter = &mut 1;
diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs
index 65ae111..2bf2824 100644
--- a/src/librustc_mir/build/mod.rs
+++ b/src/librustc_mir/build/mod.rs
@@ -910,6 +910,13 @@
let place = Place::Local(local);
let &ArgInfo(ty, opt_ty_info, pattern, ref self_binding) = arg_info;
+ // Make sure we drop (parts of) the argument even when not matched on.
+ self.schedule_drop(
+ pattern.as_ref().map_or(ast_body.span, |pat| pat.span),
+ argument_scope, &place, ty,
+ DropKind::Value { cached_block: CachedBlock::default() },
+ );
+
if let Some(pattern) = pattern {
let pattern = self.hir.pattern_from_hir(pattern);
let span = pattern.span;
@@ -941,13 +948,6 @@
}
}
}
-
- // Make sure we drop (parts of) the argument even when not matched on.
- self.schedule_drop(
- pattern.as_ref().map_or(ast_body.span, |pat| pat.span),
- argument_scope, &place, ty,
- DropKind::Value { cached_block: CachedBlock::default() },
- );
}
// Enter the argument pattern bindings source scope, if it exists.
diff --git a/src/librustc_mir/monomorphize/collector.rs b/src/librustc_mir/monomorphize/collector.rs
index a6a8fe5..eb49547 100644
--- a/src/librustc_mir/monomorphize/collector.rs
+++ b/src/librustc_mir/monomorphize/collector.rs
@@ -177,13 +177,13 @@
use rustc::hir::{self, CodegenFnAttrFlags};
use rustc::hir::itemlikevisit::ItemLikeVisitor;
-use rustc::hir::def_id::DefId;
+use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::mir::interpret::{AllocId, ConstValue};
use rustc::middle::lang_items::{ExchangeMallocFnLangItem, StartFnLangItem};
use rustc::ty::subst::Substs;
use rustc::ty::{self, TypeFoldable, Ty, TyCtxt, GenericParamDefKind};
use rustc::ty::adjustment::CustomCoerceUnsized;
-use rustc::session::config;
+use rustc::session::config::EntryFnType;
use rustc::mir::{self, Location, Promoted};
use rustc::mir::visit::Visitor as MirVisitor;
use rustc::mir::mono::MonoItem;
@@ -321,9 +321,7 @@
let mut roots = Vec::new();
{
- let entry_fn = tcx.sess.entry_fn.borrow().map(|(node_id, _, _)| {
- tcx.hir().local_def_id(node_id)
- });
+ let entry_fn = tcx.entry_fn(LOCAL_CRATE);
debug!("collect_roots: entry_fn = {:?}", entry_fn);
@@ -924,7 +922,7 @@
tcx: TyCtxt<'a, 'tcx, 'tcx>,
mode: MonoItemCollectionMode,
output: &'b mut Vec<MonoItem<'tcx>>,
- entry_fn: Option<DefId>,
+ entry_fn: Option<(DefId, EntryFnType)>,
}
impl<'b, 'a, 'v> ItemLikeVisitor<'v> for RootCollector<'b, 'a, 'v> {
@@ -1023,7 +1021,7 @@
true
}
MonoItemCollectionMode::Lazy => {
- self.entry_fn == Some(def_id) ||
+ self.entry_fn.map(|(id, _)| id) == Some(def_id) ||
self.tcx.is_reachable_non_generic(def_id) ||
self.tcx.codegen_fn_attrs(def_id).flags.contains(
CodegenFnAttrFlags::RUSTC_STD_INTERNAL_SYMBOL)
@@ -1048,14 +1046,9 @@
/// the return type of `main`. This is not needed when
/// the user writes their own `start` manually.
fn push_extra_entry_roots(&mut self) {
- if self.tcx.sess.entry_fn.get().map(|e| e.2) != Some(config::EntryFnType::Main) {
- return
- }
-
- let main_def_id = if let Some(def_id) = self.entry_fn {
- def_id
- } else {
- return
+ let main_def_id = match self.entry_fn {
+ Some((def_id, EntryFnType::Main)) => def_id,
+ _ => return,
};
let start_def_id = match self.tcx.lang_items().require(StartFnLangItem) {
diff --git a/src/librustc_mir/monomorphize/item.rs b/src/librustc_mir/monomorphize/item.rs
index 7014f53..c831cbd 100644
--- a/src/librustc_mir/monomorphize/item.rs
+++ b/src/librustc_mir/monomorphize/item.rs
@@ -1,6 +1,6 @@
use monomorphize::Instance;
use rustc::hir;
-use rustc::hir::def_id::DefId;
+use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::session::config::OptLevel;
use rustc::ty::{self, Ty, TyCtxt, ClosureSubsts, GeneratorSubsts};
use rustc::ty::subst::Substs;
@@ -75,8 +75,7 @@
match *self.as_mono_item() {
MonoItem::Fn(ref instance) => {
- let entry_def_id =
- tcx.sess.entry_fn.borrow().map(|(id, _, _)| tcx.hir().local_def_id(id));
+ let entry_def_id = tcx.entry_fn(LOCAL_CRATE).map(|(id, _)| id);
// If this function isn't inlined or otherwise has explicit
// linkage, then we'll be creating a globally shared version.
if self.explicit_linkage(tcx).is_some() ||
diff --git a/src/librustc_platform_intrinsics/Cargo.toml b/src/librustc_platform_intrinsics/Cargo.toml
deleted file mode 100644
index 92f37f9..0000000
--- a/src/librustc_platform_intrinsics/Cargo.toml
+++ /dev/null
@@ -1,9 +0,0 @@
-[package]
-authors = ["The Rust Project Developers"]
-name = "rustc_platform_intrinsics"
-version = "0.0.0"
-
-[lib]
-name = "rustc_platform_intrinsics"
-path = "lib.rs"
-crate-type = ["dylib"]
diff --git a/src/librustc_platform_intrinsics/aarch64.rs b/src/librustc_platform_intrinsics/aarch64.rs
deleted file mode 100644
index 833a312..0000000
--- a/src/librustc_platform_intrinsics/aarch64.rs
+++ /dev/null
@@ -1,3404 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("aarch64_v") { return None }
- Some(match &name["aarch64_v".len()..] {
- "hadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.shadd.v8i8")
- },
- "hadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uhadd.v8i8")
- },
- "hadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.shadd.v4i16")
- },
- "hadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uhadd.v4i16")
- },
- "hadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.shadd.v2i32")
- },
- "hadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uhadd.v2i32")
- },
- "haddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.shadd.v16i8")
- },
- "haddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uhadd.v16i8")
- },
- "haddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.shadd.v8i16")
- },
- "haddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uhadd.v8i16")
- },
- "haddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.shadd.v4i32")
- },
- "haddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uhadd.v4i32")
- },
- "rhadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.srhadd.v8i8")
- },
- "rhadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.urhadd.v8i8")
- },
- "rhadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.srhadd.v4i16")
- },
- "rhadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.urhadd.v4i16")
- },
- "rhadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.srhadd.v2i32")
- },
- "rhadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.urhadd.v2i32")
- },
- "rhaddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.srhadd.v16i8")
- },
- "rhaddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.urhadd.v16i8")
- },
- "rhaddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.srhadd.v8i16")
- },
- "rhaddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.urhadd.v8i16")
- },
- "rhaddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.srhadd.v4i32")
- },
- "rhaddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.urhadd.v4i32")
- },
- "qadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqadd.v8i8")
- },
- "qadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqadd.v8i8")
- },
- "qadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqadd.v4i16")
- },
- "qadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqadd.v4i16")
- },
- "qadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqadd.v2i32")
- },
- "qadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqadd.v2i32")
- },
- "qadd_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqadd.v1i64")
- },
- "qadd_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uqadd.v1i64")
- },
- "qaddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqadd.v16i8")
- },
- "qaddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uqadd.v16i8")
- },
- "qaddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqadd.v8i16")
- },
- "qaddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uqadd.v8i16")
- },
- "qaddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqadd.v4i32")
- },
- "qaddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uqadd.v4i32")
- },
- "qaddq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqadd.v2i64")
- },
- "qaddq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uqadd.v2i64")
- },
- "uqadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.suqadd.v16i8")
- },
- "uqadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.suqadd.v8i16")
- },
- "uqadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.suqadd.v4i32")
- },
- "uqadd_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.suqadd.v2i64")
- },
- "sqadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.usqadd.v16i8")
- },
- "sqadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.usqadd.v8i16")
- },
- "sqadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.usqadd.v4i32")
- },
- "sqadd_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.usqadd.v2i64")
- },
- "raddhn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.raddhn.v8i8")
- },
- "raddhn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.raddhn.v8i8")
- },
- "raddhn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.raddhn.v4i16")
- },
- "raddhn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.raddhn.v4i16")
- },
- "raddhn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.raddhn.v2i32")
- },
- "raddhn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.raddhn.v2i32")
- },
- "fmulx_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmulx.v2f32")
- },
- "fmulx_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fmulx.v1f64")
- },
- "fmulxq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmulx.v4f32")
- },
- "fmulxq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmulx.v2f64")
- },
- "fma_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.fma.v2f32")
- },
- "fma_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.fma.v1f64")
- },
- "fmaq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.fma.v4f32")
- },
- "fmaq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.fma.v2f64")
- },
- "qdmulh_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqdmulh.v4i16")
- },
- "qdmulh_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqdmulh.v2i32")
- },
- "qdmulhq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqdmulh.v8i16")
- },
- "qdmulhq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqdmulh.v4i32")
- },
- "qrdmulh_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqrdmulh.v4i16")
- },
- "qrdmulh_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqrdmulh.v2i32")
- },
- "qrdmulhq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqrdmulh.v8i16")
- },
- "qrdmulhq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqrdmulh.v4i32")
- },
- "mull_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smull.v8i16")
- },
- "mull_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umull.v8i16")
- },
- "mull_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smull.v4i32")
- },
- "mull_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umull.v4i32")
- },
- "mull_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.smull.v2i64")
- },
- "mull_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.umull.v2i64")
- },
- "qdmullq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqdmull.v8i16")
- },
- "qdmullq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqdmull.v4i32")
- },
- "hsub_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.shsub.v8i8")
- },
- "hsub_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uhsub.v8i8")
- },
- "hsub_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.shsub.v4i16")
- },
- "hsub_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uhsub.v4i16")
- },
- "hsub_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.shsub.v2i32")
- },
- "hsub_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uhsub.v2i32")
- },
- "hsubq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.shsub.v16i8")
- },
- "hsubq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uhsub.v16i8")
- },
- "hsubq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.shsub.v8i16")
- },
- "hsubq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uhsub.v8i16")
- },
- "hsubq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.shsub.v4i32")
- },
- "hsubq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uhsub.v4i32")
- },
- "qsub_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqsub.v8i8")
- },
- "qsub_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqsub.v8i8")
- },
- "qsub_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqsub.v4i16")
- },
- "qsub_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqsub.v4i16")
- },
- "qsub_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqsub.v2i32")
- },
- "qsub_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqsub.v2i32")
- },
- "qsub_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqsub.v1i64")
- },
- "qsub_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uqsub.v1i64")
- },
- "qsubq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqsub.v16i8")
- },
- "qsubq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uqsub.v16i8")
- },
- "qsubq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqsub.v8i16")
- },
- "qsubq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uqsub.v8i16")
- },
- "qsubq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqsub.v4i32")
- },
- "qsubq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uqsub.v4i32")
- },
- "qsubq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqsub.v2i64")
- },
- "qsubq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uqsub.v2i64")
- },
- "rsubhn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.rsubhn.v8i8")
- },
- "rsubhn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.rsubhn.v8i8")
- },
- "rsubhn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.rsubhn.v4i16")
- },
- "rsubhn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.rsubhn.v4i16")
- },
- "rsubhn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.rsubhn.v2i32")
- },
- "rsubhn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.rsubhn.v2i32")
- },
- "abd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sabd.v8i8")
- },
- "abd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uabd.v8i8")
- },
- "abd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sabd.v4i16")
- },
- "abd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uabd.v4i16")
- },
- "abd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sabd.v2i32")
- },
- "abd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uabd.v2i32")
- },
- "abd_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fabd.v2f32")
- },
- "abd_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fabd.v1f64")
- },
- "abdq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sabd.v16i8")
- },
- "abdq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uabd.v16i8")
- },
- "abdq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sabd.v8i16")
- },
- "abdq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uabd.v8i16")
- },
- "abdq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sabd.v4i32")
- },
- "abdq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uabd.v4i32")
- },
- "abdq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fabd.v4f32")
- },
- "abdq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fabd.v2f64")
- },
- "max_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.smax.v8i8")
- },
- "max_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.umax.v8i8")
- },
- "max_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.smax.v4i16")
- },
- "max_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.umax.v4i16")
- },
- "max_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.smax.v2i32")
- },
- "max_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.umax.v2i32")
- },
- "max_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmax.v2f32")
- },
- "max_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fmax.v1f64")
- },
- "maxq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.smax.v16i8")
- },
- "maxq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.umax.v16i8")
- },
- "maxq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smax.v8i16")
- },
- "maxq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umax.v8i16")
- },
- "maxq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smax.v4i32")
- },
- "maxq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umax.v4i32")
- },
- "maxq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmax.v4f32")
- },
- "maxq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmax.v2f64")
- },
- "min_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.smin.v8i8")
- },
- "min_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.umin.v8i8")
- },
- "min_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.smin.v4i16")
- },
- "min_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.umin.v4i16")
- },
- "min_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.smin.v2i32")
- },
- "min_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.umin.v2i32")
- },
- "min_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmin.v2f32")
- },
- "min_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fmin.v1f64")
- },
- "minq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.smin.v16i8")
- },
- "minq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.umin.v16i8")
- },
- "minq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smin.v8i16")
- },
- "minq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umin.v8i16")
- },
- "minq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smin.v4i32")
- },
- "minq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umin.v4i32")
- },
- "minq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmin.v4f32")
- },
- "minq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmin.v2f64")
- },
- "maxnm_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmaxnm.v2f32")
- },
- "maxnm_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fmaxnm.v1f64")
- },
- "maxnmq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmaxnm.v4f32")
- },
- "maxnmq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmaxnm.v2f64")
- },
- "minnm_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fminnm.v2f32")
- },
- "minnm_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.fminnm.v1f64")
- },
- "minnmq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fminnm.v4f32")
- },
- "minnmq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fminnm.v2f64")
- },
- "shl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sshl.v8i8")
- },
- "shl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.ushl.v8i8")
- },
- "shl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sshl.v4i16")
- },
- "shl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.ushl.v4i16")
- },
- "shl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sshl.v2i32")
- },
- "shl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.ushl.v2i32")
- },
- "shl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sshl.v1i64")
- },
- "shl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.ushl.v1i64")
- },
- "shlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sshl.v16i8")
- },
- "shlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.ushl.v16i8")
- },
- "shlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sshl.v8i16")
- },
- "shlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.ushl.v8i16")
- },
- "shlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sshl.v4i32")
- },
- "shlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.ushl.v4i32")
- },
- "shlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sshl.v2i64")
- },
- "shlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.ushl.v2i64")
- },
- "qshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqshl.v8i8")
- },
- "qshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqshl.v8i8")
- },
- "qshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqshl.v4i16")
- },
- "qshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqshl.v4i16")
- },
- "qshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqshl.v2i32")
- },
- "qshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqshl.v2i32")
- },
- "qshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqshl.v1i64")
- },
- "qshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uqshl.v1i64")
- },
- "qshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqshl.v16i8")
- },
- "qshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uqshl.v16i8")
- },
- "qshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqshl.v8i16")
- },
- "qshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uqshl.v8i16")
- },
- "qshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqshl.v4i32")
- },
- "qshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uqshl.v4i32")
- },
- "qshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqshl.v2i64")
- },
- "qshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uqshl.v2i64")
- },
- "rshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.srshl.v8i8")
- },
- "rshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.urshl.v8i8")
- },
- "rshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.srshl.v4i16")
- },
- "rshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.urshl.v4i16")
- },
- "rshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.srshl.v2i32")
- },
- "rshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.urshl.v2i32")
- },
- "rshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.srshl.v1i64")
- },
- "rshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.urshl.v1i64")
- },
- "rshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.srshl.v16i8")
- },
- "rshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.urshl.v16i8")
- },
- "rshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.srshl.v8i16")
- },
- "rshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.urshl.v8i16")
- },
- "rshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.srshl.v4i32")
- },
- "rshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.urshl.v4i32")
- },
- "rshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.srshl.v2i64")
- },
- "rshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.urshl.v2i64")
- },
- "qrshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqrshl.v8i8")
- },
- "qrshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqrshl.v8i8")
- },
- "qrshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqrshl.v4i16")
- },
- "qrshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqrshl.v4i16")
- },
- "qrshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqrshl.v2i32")
- },
- "qrshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqrshl.v2i32")
- },
- "qrshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqrshl.v1i64")
- },
- "qrshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uqrshl.v1i64")
- },
- "qrshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqrshl.v16i8")
- },
- "qrshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uqrshl.v16i8")
- },
- "qrshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqrshl.v8i16")
- },
- "qrshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uqrshl.v8i16")
- },
- "qrshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqrshl.v4i32")
- },
- "qrshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uqrshl.v4i32")
- },
- "qrshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqrshl.v2i64")
- },
- "qrshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uqrshl.v2i64")
- },
- "qshrun_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqshrun.v8i8")
- },
- "qshrun_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqshrun.v4i16")
- },
- "qshrun_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqshrun.v2i32")
- },
- "qrshrun_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqrshrun.v8i8")
- },
- "qrshrun_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqrshrun.v4i16")
- },
- "qrshrun_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqrshrun.v2i32")
- },
- "qshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqshrn.v8i8")
- },
- "qshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqshrn.v8i8")
- },
- "qshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqshrn.v4i16")
- },
- "qshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqshrn.v4i16")
- },
- "qshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqshrn.v2i32")
- },
- "qshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqshrn.v2i32")
- },
- "rshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.rshrn.v8i8")
- },
- "rshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.rshrn.v8i8")
- },
- "rshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.rshrn.v4i16")
- },
- "rshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.rshrn.v4i16")
- },
- "rshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.rshrn.v2i32")
- },
- "rshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.rshrn.v2i32")
- },
- "qrshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqrshrn.v8i8")
- },
- "qrshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqrshrn.v8i8")
- },
- "qrshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqrshrn.v4i16")
- },
- "qrshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqrshrn.v4i16")
- },
- "qrshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqrshrn.v2i32")
- },
- "qrshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqrshrn.v2i32")
- },
- "sri_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.vsri.v8i8")
- },
- "sri_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.vsri.v8i8")
- },
- "sri_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.vsri.v4i16")
- },
- "sri_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.vsri.v4i16")
- },
- "sri_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.vsri.v2i32")
- },
- "sri_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.vsri.v2i32")
- },
- "sri_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.vsri.v1i64")
- },
- "sri_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.vsri.v1i64")
- },
- "sriq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.vsri.v16i8")
- },
- "sriq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.vsri.v16i8")
- },
- "sriq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.vsri.v8i16")
- },
- "sriq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.vsri.v8i16")
- },
- "sriq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.vsri.v4i32")
- },
- "sriq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.vsri.v4i32")
- },
- "sriq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.vsri.v2i64")
- },
- "sriq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.vsri.v2i64")
- },
- "sli_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.vsli.v8i8")
- },
- "sli_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.vsli.v8i8")
- },
- "sli_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.vsli.v4i16")
- },
- "sli_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.vsli.v4i16")
- },
- "sli_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.vsli.v2i32")
- },
- "sli_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.vsli.v2i32")
- },
- "sli_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.vsli.v1i64")
- },
- "sli_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.vsli.v1i64")
- },
- "sliq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.vsli.v16i8")
- },
- "sliq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.vsli.v16i8")
- },
- "sliq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.vsli.v8i16")
- },
- "sliq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.vsli.v8i16")
- },
- "sliq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.vsli.v4i32")
- },
- "sliq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.vsli.v4i32")
- },
- "sliq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.vsli.v2i64")
- },
- "sliq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.vsli.v2i64")
- },
- "vqmovn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqxtn.v8i8")
- },
- "vqmovn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uqxtn.v8i8")
- },
- "vqmovn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqxtn.v4i16")
- },
- "vqmovn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uqxtn.v4i16")
- },
- "vqmovn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqxtn.v2i32")
- },
- "vqmovn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uqxtn.v2i32")
- },
- "abs_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.abs.v8i8")
- },
- "abs_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.abs.v4i16")
- },
- "abs_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.abs.v2i32")
- },
- "abs_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.abs.v1i64")
- },
- "absq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.abs.v16i8")
- },
- "absq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.abs.v8i16")
- },
- "absq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.abs.v4i32")
- },
- "absq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.abs.v2i64")
- },
- "abs_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.fabs.v2f32")
- },
- "abs_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.fabs.v1f64")
- },
- "absq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.fabs.v4f32")
- },
- "absq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.fabs.v2f64")
- },
- "qabs_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqabs.v8i8")
- },
- "qabs_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqabs.v4i16")
- },
- "qabs_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqabs.v2i32")
- },
- "qabs_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqabs.v1i64")
- },
- "qabsq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqabs.v16i8")
- },
- "qabsq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqabs.v8i16")
- },
- "qabsq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqabs.v4i32")
- },
- "qabsq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqabs.v2i64")
- },
- "qneg_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sqneg.v8i8")
- },
- "qneg_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sqneg.v4i16")
- },
- "qneg_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sqneg.v2i32")
- },
- "qneg_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.sqneg.v1i64")
- },
- "qnegq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sqneg.v16i8")
- },
- "qnegq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sqneg.v8i16")
- },
- "qnegq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sqneg.v4i32")
- },
- "qnegq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sqneg.v2i64")
- },
- "clz_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.ctlz.v8i8")
- },
- "clz_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.ctlz.v8i8")
- },
- "clz_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.ctlz.v4i16")
- },
- "clz_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.ctlz.v4i16")
- },
- "clz_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.ctlz.v2i32")
- },
- "clz_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.ctlz.v2i32")
- },
- "clzq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ctlz.v16i8")
- },
- "clzq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ctlz.v16i8")
- },
- "clzq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ctlz.v8i16")
- },
- "clzq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ctlz.v8i16")
- },
- "clzq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ctlz.v4i32")
- },
- "clzq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ctlz.v4i32")
- },
- "cls_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.cls.v8i8")
- },
- "cls_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.cls.v8i8")
- },
- "cls_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.cls.v4i16")
- },
- "cls_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.cls.v4i16")
- },
- "cls_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.cls.v2i32")
- },
- "cls_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.cls.v2i32")
- },
- "clsq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.cls.v16i8")
- },
- "clsq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.cls.v16i8")
- },
- "clsq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.cls.v8i16")
- },
- "clsq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.cls.v8i16")
- },
- "clsq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.cls.v4i32")
- },
- "clsq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.cls.v4i32")
- },
- "cnt_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.ctpop.v8i8")
- },
- "cnt_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.ctpop.v8i8")
- },
- "cntq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ctpop.v16i8")
- },
- "cntq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ctpop.v16i8")
- },
- "recpe_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.urecpe.v2i32")
- },
- "recpe_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.frecpe.v2f32")
- },
- "recpe_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.frecpe.v1f64")
- },
- "recpeq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.urecpe.v4i32")
- },
- "recpeq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.frecpe.v4f32")
- },
- "recpeq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.frecpe.v2f64")
- },
- "recps_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.frecps.v2f32")
- },
- "recps_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.frecps.v1f64")
- },
- "recpsq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.frecps.v4f32")
- },
- "recpsq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.frecps.v2f64")
- },
- "sqrt_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.sqrt.v2f32")
- },
- "sqrt_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.sqrt.v1f64")
- },
- "sqrtq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.sqrt.v4f32")
- },
- "sqrtq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.sqrt.v2f64")
- },
- "rsqrte_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.ursqrte.v2i32")
- },
- "rsqrte_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.frsqrte.v2f32")
- },
- "rsqrte_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.frsqrte.v1f64")
- },
- "rsqrteq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.ursqrte.v4i32")
- },
- "rsqrteq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.frsqrte.v4f32")
- },
- "rsqrteq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.frsqrte.v2f64")
- },
- "rsqrts_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.frsqrts.v2f32")
- },
- "rsqrts_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &INPUTS },
- output: &::F64x1,
- definition: Named("llvm.aarch64.neon.frsqrts.v1f64")
- },
- "rsqrtsq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.frsqrts.v4f32")
- },
- "rsqrtsq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.frsqrts.v2f64")
- },
- "rbit_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.rbit.v8i8")
- },
- "rbit_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.rbit.v8i8")
- },
- "rbitq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.rbit.v16i8")
- },
- "rbitq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.rbit.v16i8")
- },
- "ld2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i8.p0v8i8")
- },
- "ld2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i8.p0v8i8")
- },
- "ld2_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i16.p0v4i16")
- },
- "ld2_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i16.p0v4i16")
- },
- "ld2_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i32.p0v2i32")
- },
- "ld2_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i32.p0v2i32")
- },
- "ld2_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1i64.p0v1i64")
- },
- "ld2_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1i64.p0v1i64")
- },
- "ld2_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2f32.p0v2f32")
- },
- "ld2_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1f64.p0v1f64")
- },
- "ld2q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v16i8.p0v16i8")
- },
- "ld2q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v16i8.p0v16i8")
- },
- "ld2q_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i16.p0v8i16")
- },
- "ld2q_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i16.p0v8i16")
- },
- "ld2q_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i32.p0v4i32")
- },
- "ld2q_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i32.p0v4i32")
- },
- "ld2q_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i64.p0v2i64")
- },
- "ld2q_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i64.p0v2i64")
- },
- "ld2q_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4f32.p0v4f32")
- },
- "ld2q_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2f64.p0v2f64")
- },
- "ld3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i8.p0v8i8")
- },
- "ld3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i8.p0v8i8")
- },
- "ld3_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I16x4, &::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i16.p0v4i16")
- },
- "ld3_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U16x4, &::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i16.p0v4i16")
- },
- "ld3_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I32x2, &::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i32.p0v2i32")
- },
- "ld3_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U32x2, &::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i32.p0v2i32")
- },
- "ld3_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I64x1, &::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1i64.p0v1i64")
- },
- "ld3_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U64x1, &::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1i64.p0v1i64")
- },
- "ld3_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F32x2, &::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2f32.p0v2f32")
- },
- "ld3_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F64x1, &::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1f64.p0v1f64")
- },
- "ld3q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v16i8.p0v16i8")
- },
- "ld3q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v16i8.p0v16i8")
- },
- "ld3q_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i16.p0v8i16")
- },
- "ld3q_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U16x8, &::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i16.p0v8i16")
- },
- "ld3q_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I32x4, &::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i32.p0v4i32")
- },
- "ld3q_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U32x4, &::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i32.p0v4i32")
- },
- "ld3q_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I64x2, &::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i64.p0v2i64")
- },
- "ld3q_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U64x2, &::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i64.p0v2i64")
- },
- "ld3q_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4f32.p0v4f32")
- },
- "ld3q_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2f64.p0v2f64")
- },
- "ld4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I8x8, &::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i8.p0v8i8")
- },
- "ld4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U8x8, &::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i8.p0v8i8")
- },
- "ld4_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I16x4, &::I16x4, &::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i16.p0v4i16")
- },
- "ld4_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U16x4, &::U16x4, &::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i16.p0v4i16")
- },
- "ld4_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I32x2, &::I32x2, &::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i32.p0v2i32")
- },
- "ld4_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U32x2, &::U32x2, &::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i32.p0v2i32")
- },
- "ld4_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I64x1, &::I64x1, &::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1i64.p0v1i64")
- },
- "ld4_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U64x1, &::U64x1, &::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1i64.p0v1i64")
- },
- "ld4_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F32x2, &::F32x2, &::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2f32.p0v2f32")
- },
- "ld4_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x1), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F64x1, &::F64x1, &::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1f64.p0v1f64")
- },
- "ld4q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, Some(&::I8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v16i8.p0v16i8")
- },
- "ld4q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, Some(&::U8x16), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v16i8.p0v16i8")
- },
- "ld4q_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, Some(&::I16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I16x8, &::I16x8, &::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i16.p0v8i16")
- },
- "ld4q_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, Some(&::U16x8), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U16x8, &::U16x8, &::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i16.p0v8i16")
- },
- "ld4q_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I32x4, &::I32x4, &::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i32.p0v4i32")
- },
- "ld4q_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, Some(&::U32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U32x4, &::U32x4, &::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i32.p0v4i32")
- },
- "ld4q_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I64x2, &::I64x2, &::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i64.p0v2i64")
- },
- "ld4q_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, Some(&::U64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U64x2, &::U64x2, &::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i64.p0v2i64")
- },
- "ld4q_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::F32x4), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F32x4, &::F32x4, &::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4f32.p0v4f32")
- },
- "ld4q_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::F64x2), true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F64x2, &::F64x2, &::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2f64.p0v2f64")
- },
- "ld2_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i8.p0i8")
- },
- "ld2_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i8.p0i8")
- },
- "ld2_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i16.p0i16")
- },
- "ld2_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i16.p0i16")
- },
- "ld2_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i32.p0i32")
- },
- "ld2_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i32.p0i32")
- },
- "ld2_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1i64.p0i64")
- },
- "ld2_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1i64.p0i64")
- },
- "ld2_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2f32.p0f32")
- },
- "ld2_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v1f64.p0f64")
- },
- "ld2q_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v16i8.p0i8")
- },
- "ld2q_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v16i8.p0i8")
- },
- "ld2q_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i16.p0i16")
- },
- "ld2q_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v8i16.p0i16")
- },
- "ld2q_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i32.p0i32")
- },
- "ld2q_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4i32.p0i32")
- },
- "ld2q_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i64.p0i64")
- },
- "ld2q_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2i64.p0i64")
- },
- "ld2q_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v4f32.p0f32")
- },
- "ld2q_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld2.v2f64.p0f64")
- },
- "ld3_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i8.p0i8")
- },
- "ld3_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i8.p0i8")
- },
- "ld3_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I16x4, &::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i16.p0i16")
- },
- "ld3_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U16x4, &::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i16.p0i16")
- },
- "ld3_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I32x2, &::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i32.p0i32")
- },
- "ld3_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U32x2, &::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i32.p0i32")
- },
- "ld3_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I64x1, &::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1i64.p0i64")
- },
- "ld3_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U64x1, &::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1i64.p0i64")
- },
- "ld3_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F32x2, &::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2f32.p0f32")
- },
- "ld3_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F64x1, &::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v1f64.p0f64")
- },
- "ld3q_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v16i8.p0i8")
- },
- "ld3q_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v16i8.p0i8")
- },
- "ld3q_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i16.p0i16")
- },
- "ld3q_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U16x8, &::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v8i16.p0i16")
- },
- "ld3q_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I32x4, &::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i32.p0i32")
- },
- "ld3q_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U32x4, &::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4i32.p0i32")
- },
- "ld3q_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::I64x2, &::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i64.p0i64")
- },
- "ld3q_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::U64x2, &::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2i64.p0i64")
- },
- "ld3q_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v4f32.p0f32")
- },
- "ld3q_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld3.v2f64.p0f64")
- },
- "ld4_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I8x8, &::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i8.p0i8")
- },
- "ld4_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U8x8, &::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i8.p0i8")
- },
- "ld4_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I16x4, &::I16x4, &::I16x4, &::I16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i16.p0i16")
- },
- "ld4_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U16x4, &::U16x4, &::U16x4, &::U16x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i16.p0i16")
- },
- "ld4_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I32x2, &::I32x2, &::I32x2, &::I32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i32.p0i32")
- },
- "ld4_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U32x2, &::U32x2, &::U32x2, &::U32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i32.p0i32")
- },
- "ld4_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I64x1, &::I64x1, &::I64x1, &::I64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1i64.p0i64")
- },
- "ld4_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U64x1, &::U64x1, &::U64x1, &::U64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1i64.p0i64")
- },
- "ld4_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F32x2, &::F32x2, &::F32x2, &::F32x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2f32.p0f32")
- },
- "ld4_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F64x1, &::F64x1, &::F64x1, &::F64x1]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v1f64.p0f64")
- },
- "ld4q_dup_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v16i8.p0i8")
- },
- "ld4q_dup_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v16i8.p0i8")
- },
- "ld4q_dup_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I16x8, &::I16x8, &::I16x8, &::I16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i16.p0i16")
- },
- "ld4q_dup_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U16, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U16x8, &::U16x8, &::U16x8, &::U16x8]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v8i16.p0i16")
- },
- "ld4q_dup_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I32x4, &::I32x4, &::I32x4, &::I32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i32.p0i32")
- },
- "ld4q_dup_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U32x4, &::U32x4, &::U32x4, &::U32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4i32.p0i32")
- },
- "ld4q_dup_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::I64x2, &::I64x2, &::I64x2, &::I64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i64.p0i64")
- },
- "ld4q_dup_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::U64x2, &::U64x2, &::U64x2, &::U64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2i64.p0i64")
- },
- "ld4q_dup_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F32, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F32x4, &::F32x4, &::F32x4, &::F32x4]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v4f32.p0f32")
- },
- "ld4q_dup_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::F64, None, true); &PTR }]; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 4] = [&::F64x2, &::F64x2, &::F64x2, &::F64x2]; &PARTS }); &AGG },
- definition: Named("llvm.aarch64.neon.ld4.v2f64.p0f64")
- },
- "padd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.addp.v8i8")
- },
- "padd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.addp.v8i8")
- },
- "padd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.addp.v4i16")
- },
- "padd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.addp.v4i16")
- },
- "padd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.addp.v2i32")
- },
- "padd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.addp.v2i32")
- },
- "padd_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.addp.v2f32")
- },
- "paddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.addp.v16i8")
- },
- "paddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.addp.v16i8")
- },
- "paddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.addp.v8i16")
- },
- "paddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.addp.v8i16")
- },
- "paddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.addp.v4i32")
- },
- "paddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.addp.v4i32")
- },
- "paddq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.addp.v4f32")
- },
- "paddq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.addp.v2i64")
- },
- "paddq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.addp.v2i64")
- },
- "paddq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.addp.v2f64")
- },
- "paddl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.saddlp.v4i16.v8i8")
- },
- "paddl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uaddlp.v4i16.v8i8")
- },
- "paddl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.saddlp.v2i32.v4i16")
- },
- "paddl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uaddlp.v2i32.v4i16")
- },
- "paddl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.aarch64.neon.saddlp.v1i64.v2i32")
- },
- "paddl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.aarch64.neon.uaddlp.v1i64.v2i32")
- },
- "paddlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.saddlp.v8i16.v16i8")
- },
- "paddlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uaddlp.v8i16.v16i8")
- },
- "paddlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.saddlp.v4i32.v8i16")
- },
- "paddlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uaddlp.v4i32.v8i16")
- },
- "paddlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.saddlp.v2i64.v4i32")
- },
- "paddlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uaddlp.v2i64.v4i32")
- },
- "pmax_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.smaxp.v8i8")
- },
- "pmax_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.umaxp.v8i8")
- },
- "pmax_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.smaxp.v4i16")
- },
- "pmax_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.umaxp.v4i16")
- },
- "pmax_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.smaxp.v2i32")
- },
- "pmax_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.umaxp.v2i32")
- },
- "pmax_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmaxp.v2f32")
- },
- "pmaxq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.smaxp.v16i8")
- },
- "pmaxq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.umaxp.v16i8")
- },
- "pmaxq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smaxp.v8i16")
- },
- "pmaxq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umaxp.v8i16")
- },
- "pmaxq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smaxp.v4i32")
- },
- "pmaxq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umaxp.v4i32")
- },
- "pmaxq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmaxp.v4f32")
- },
- "pmaxq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.smaxp.v2i64")
- },
- "pmaxq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.umaxp.v2i64")
- },
- "pmaxq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmaxp.v2f64")
- },
- "pmin_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.sminp.v8i8")
- },
- "pmin_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.uminp.v8i8")
- },
- "pmin_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.sminp.v4i16")
- },
- "pmin_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.uminp.v4i16")
- },
- "pmin_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.sminp.v2i32")
- },
- "pmin_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.uminp.v2i32")
- },
- "pmin_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fminp.v2f32")
- },
- "pminq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.sminp.v16i8")
- },
- "pminq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.uminp.v16i8")
- },
- "pminq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.sminp.v8i16")
- },
- "pminq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.uminp.v8i16")
- },
- "pminq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.sminp.v4i32")
- },
- "pminq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.uminp.v4i32")
- },
- "pminq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fminp.v4f32")
- },
- "pminq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.sminp.v2i64")
- },
- "pminq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.uminp.v2i64")
- },
- "pminq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fminp.v2f64")
- },
- "pmaxnm_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.smaxnmp.v8i8")
- },
- "pmaxnm_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.umaxnmp.v8i8")
- },
- "pmaxnm_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.aarch64.neon.smaxnmp.v4i16")
- },
- "pmaxnm_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.aarch64.neon.umaxnmp.v4i16")
- },
- "pmaxnm_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.aarch64.neon.smaxnmp.v2i32")
- },
- "pmaxnm_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.aarch64.neon.umaxnmp.v2i32")
- },
- "pmaxnm_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fmaxnmp.v2f32")
- },
- "pmaxnmq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.smaxnmp.v16i8")
- },
- "pmaxnmq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.umaxnmp.v16i8")
- },
- "pmaxnmq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.aarch64.neon.smaxnmp.v8i16")
- },
- "pmaxnmq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.aarch64.neon.umaxnmp.v8i16")
- },
- "pmaxnmq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.aarch64.neon.smaxnmp.v4i32")
- },
- "pmaxnmq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.aarch64.neon.umaxnmp.v4i32")
- },
- "pmaxnmq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fmaxnmp.v4f32")
- },
- "pmaxnmq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.aarch64.neon.smaxnmp.v2i64")
- },
- "pmaxnmq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.aarch64.neon.umaxnmp.v2i64")
- },
- "pmaxnmq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fmaxnmp.v2f64")
- },
- "pminnm_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.aarch64.neon.fminnmp.v2f32")
- },
- "pminnmq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.aarch64.neon.fminnmp.v4f32")
- },
- "pminnmq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.aarch64.neon.fminnmp.v2f64")
- },
- "addv_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.saddv.i8.v8i8")
- },
- "addv_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.uaddv.i8.v8i8")
- },
- "addv_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.saddv.i16.v4i16")
- },
- "addv_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uaddv.i16.v4i16")
- },
- "addv_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.saddv.i32.v2i32")
- },
- "addv_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uaddv.i32.v2i32")
- },
- "addv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.faddv.f32.v2f32")
- },
- "addvq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.saddv.i8.v16i8")
- },
- "addvq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.uaddv.i8.v16i8")
- },
- "addvq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.saddv.i16.v8i16")
- },
- "addvq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uaddv.i16.v8i16")
- },
- "addvq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.saddv.i32.v4i32")
- },
- "addvq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uaddv.i32.v4i32")
- },
- "addvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.faddv.f32.v4f32")
- },
- "addvq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I64,
- definition: Named("llvm.aarch64.neon.saddv.i64.v2i64")
- },
- "addvq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U64x2]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.aarch64.neon.uaddv.i64.v2i64")
- },
- "addvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.faddv.f64.v2f64")
- },
- "addlv_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.saddlv.i16.v8i8")
- },
- "addlv_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uaddlv.i16.v8i8")
- },
- "addlv_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.saddlv.i32.v4i16")
- },
- "addlv_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uaddlv.i32.v4i16")
- },
- "addlv_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I64,
- definition: Named("llvm.aarch64.neon.saddlv.i64.v2i32")
- },
- "addlv_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.aarch64.neon.uaddlv.i64.v2i32")
- },
- "addlvq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.saddlv.i16.v16i8")
- },
- "addlvq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uaddlv.i16.v16i8")
- },
- "addlvq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.saddlv.i32.v8i16")
- },
- "addlvq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uaddlv.i32.v8i16")
- },
- "addlvq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I64,
- definition: Named("llvm.aarch64.neon.saddlv.i64.v4i32")
- },
- "addlvq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.aarch64.neon.uaddlv.i64.v4i32")
- },
- "maxv_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.smaxv.i8.v8i8")
- },
- "maxv_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.umaxv.i8.v8i8")
- },
- "maxv_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.smaxv.i16.v4i16")
- },
- "maxv_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.umaxv.i16.v4i16")
- },
- "maxv_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.smaxv.i32.v2i32")
- },
- "maxv_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.umaxv.i32.v2i32")
- },
- "maxv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fmaxv.f32.v2f32")
- },
- "maxvq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.smaxv.i8.v16i8")
- },
- "maxvq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.umaxv.i8.v16i8")
- },
- "maxvq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.smaxv.i16.v8i16")
- },
- "maxvq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.umaxv.i16.v8i16")
- },
- "maxvq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.smaxv.i32.v4i32")
- },
- "maxvq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.umaxv.i32.v4i32")
- },
- "maxvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fmaxv.f32.v4f32")
- },
- "maxvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.fmaxv.f64.v2f64")
- },
- "minv_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.sminv.i8.v8i8")
- },
- "minv_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.uminv.i8.v8i8")
- },
- "minv_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.sminv.i16.v4i16")
- },
- "minv_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uminv.i16.v4i16")
- },
- "minv_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.sminv.i32.v2i32")
- },
- "minv_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uminv.i32.v2i32")
- },
- "minv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fminv.f32.v2f32")
- },
- "minvq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8,
- definition: Named("llvm.aarch64.neon.sminv.i8.v16i8")
- },
- "minvq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8,
- definition: Named("llvm.aarch64.neon.uminv.i8.v16i8")
- },
- "minvq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16,
- definition: Named("llvm.aarch64.neon.sminv.i16.v8i16")
- },
- "minvq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16,
- definition: Named("llvm.aarch64.neon.uminv.i16.v8i16")
- },
- "minvq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.aarch64.neon.sminv.i32.v4i32")
- },
- "minvq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.aarch64.neon.uminv.i32.v4i32")
- },
- "minvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fminv.f32.v4f32")
- },
- "minvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.fminv.f64.v2f64")
- },
- "maxnmv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fmaxnmv.f32.v2f32")
- },
- "maxnmvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fmaxnmv.f32.v4f32")
- },
- "maxnmvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.fmaxnmv.f64.v2f64")
- },
- "minnmv_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fminnmv.f32.v2f32")
- },
- "minnmvq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32,
- definition: Named("llvm.aarch64.neon.fminnmv.f32.v4f32")
- },
- "minnmvq_f64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64,
- definition: Named("llvm.aarch64.neon.fminnmv.f64.v2f64")
- },
- "qtbl1_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbl1.v8i8")
- },
- "qtbl1_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbl1.v8i8")
- },
- "qtbl1q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbl1.v16i8")
- },
- "qtbl1q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbl1.v16i8")
- },
- "qtbx1_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, &::I8x16, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbx1.v8i8")
- },
- "qtbx1_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, &::U8x16, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbx1.v8i8")
- },
- "qtbx1q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbx1.v16i8")
- },
- "qtbx1q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbx1.v16i8")
- },
- "qtbl2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbl2.v8i8")
- },
- "qtbl2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbl2.v8i8")
- },
- "qtbl2q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbl2.v16i8")
- },
- "qtbl2q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbl2.v16i8")
- },
- "qtbx2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbx2.v8i8")
- },
- "qtbx2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbx2.v8i8")
- },
- "qtbx2q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbx2.v16i8")
- },
- "qtbx2q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbx2.v16i8")
- },
- "qtbl3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbl3.v8i8")
- },
- "qtbl3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbl3.v8i8")
- },
- "qtbl3q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbl3.v16i8")
- },
- "qtbl3q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbl3.v16i8")
- },
- "qtbx3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbx3.v8i8")
- },
- "qtbx3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbx3.v8i8")
- },
- "qtbx3q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbx3.v16i8")
- },
- "qtbx3q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbx3.v16i8")
- },
- "qtbl4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbl4.v8i8")
- },
- "qtbl4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbl4.v8i8")
- },
- "qtbl4q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbl4.v16i8")
- },
- "qtbl4q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbl4.v16i8")
- },
- "qtbx4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.aarch64.neon.tbx4.v8i8")
- },
- "qtbx4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.aarch64.neon.tbx4.v8i8")
- },
- "qtbx4q_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x16, &::I8x16, &::I8x16, &::I8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.aarch64.neon.tbx4.v16i8")
- },
- "qtbx4q_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x16, &::U8x16, &::U8x16, &::U8x16]; &PARTS }); &AGG }, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.aarch64.neon.tbx4.v16i8")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/arm.rs b/src/librustc_platform_intrinsics/arm.rs
deleted file mode 100644
index 2d19293..0000000
--- a/src/librustc_platform_intrinsics/arm.rs
+++ /dev/null
@@ -1,2074 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("arm_v") { return None }
- Some(match &name["arm_v".len()..] {
- "hadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vhadds.v8i8")
- },
- "hadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vhaddu.v8i8")
- },
- "hadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vhadds.v4i16")
- },
- "hadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vhaddu.v4i16")
- },
- "hadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vhadds.v2i32")
- },
- "hadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vhaddu.v2i32")
- },
- "haddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vhadds.v16i8")
- },
- "haddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vhaddu.v16i8")
- },
- "haddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vhadds.v8i16")
- },
- "haddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vhaddu.v8i16")
- },
- "haddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vhadds.v4i32")
- },
- "haddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vhaddu.v4i32")
- },
- "rhadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vrhadds.v8i8")
- },
- "rhadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vrhaddu.v8i8")
- },
- "rhadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vrhadds.v4i16")
- },
- "rhadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vrhaddu.v4i16")
- },
- "rhadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vrhadds.v2i32")
- },
- "rhadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrhaddu.v2i32")
- },
- "rhaddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vrhadds.v16i8")
- },
- "rhaddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vrhaddu.v16i8")
- },
- "rhaddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vrhadds.v8i16")
- },
- "rhaddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vrhaddu.v8i16")
- },
- "rhaddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vrhadds.v4i32")
- },
- "rhaddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vrhaddu.v4i32")
- },
- "qadd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqadds.v8i8")
- },
- "qadd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqaddu.v8i8")
- },
- "qadd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqadds.v4i16")
- },
- "qadd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqaddu.v4i16")
- },
- "qadd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqadds.v2i32")
- },
- "qadd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqaddu.v2i32")
- },
- "qadd_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vqadds.v1i64")
- },
- "qadd_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vqaddu.v1i64")
- },
- "qaddq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vqadds.v16i8")
- },
- "qaddq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vqaddu.v16i8")
- },
- "qaddq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vqadds.v8i16")
- },
- "qaddq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vqaddu.v8i16")
- },
- "qaddq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vqadds.v4i32")
- },
- "qaddq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vqaddu.v4i32")
- },
- "qaddq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vqadds.v2i64")
- },
- "qaddq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vqaddu.v2i64")
- },
- "raddhn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vraddhn.v8i8")
- },
- "raddhn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vraddhn.v8i8")
- },
- "raddhn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vraddhn.v4i16")
- },
- "raddhn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vraddhn.v4i16")
- },
- "raddhn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vraddhn.v2i32")
- },
- "raddhn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vraddhn.v2i32")
- },
- "fma_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.fma.v2f32")
- },
- "fmaq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.fma.v4f32")
- },
- "qdmulh_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqdmulh.v4i16")
- },
- "qdmulh_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqdmulh.v2i32")
- },
- "qdmulhq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqdmulh.v8i16")
- },
- "qdmulhq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqdmulh.v4i32")
- },
- "qrdmulh_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqrdmulh.v4i16")
- },
- "qrdmulh_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqrdmulh.v2i32")
- },
- "qrdmulhq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqrdmulh.v8i16")
- },
- "qrdmulhq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqrdmulh.v4i32")
- },
- "mull_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vmulls.v8i16")
- },
- "mull_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vmullu.v8i16")
- },
- "mull_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vmulls.v4i32")
- },
- "mull_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vmullu.v4i32")
- },
- "mull_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vmulls.v2i64")
- },
- "mull_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vmullu.v2i64")
- },
- "qdmullq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqdmull.v8i16")
- },
- "qdmullq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqdmull.v4i32")
- },
- "hsub_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vhsubs.v8i8")
- },
- "hsub_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vhsubu.v8i8")
- },
- "hsub_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vhsubs.v4i16")
- },
- "hsub_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vhsubu.v4i16")
- },
- "hsub_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vhsubs.v2i32")
- },
- "hsub_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vhsubu.v2i32")
- },
- "hsubq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vhsubs.v16i8")
- },
- "hsubq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vhsubu.v16i8")
- },
- "hsubq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vhsubs.v8i16")
- },
- "hsubq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vhsubu.v8i16")
- },
- "hsubq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vhsubs.v4i32")
- },
- "hsubq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vhsubu.v4i32")
- },
- "qsub_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqsubs.v8i8")
- },
- "qsub_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqsubu.v8i8")
- },
- "qsub_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqsubs.v4i16")
- },
- "qsub_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqsubu.v4i16")
- },
- "qsub_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqsubs.v2i32")
- },
- "qsub_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqsubu.v2i32")
- },
- "qsub_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vqsubs.v1i64")
- },
- "qsub_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vqsubu.v1i64")
- },
- "qsubq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vqsubs.v16i8")
- },
- "qsubq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vqsubu.v16i8")
- },
- "qsubq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vqsubs.v8i16")
- },
- "qsubq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vqsubu.v8i16")
- },
- "qsubq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vqsubs.v4i32")
- },
- "qsubq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vqsubu.v4i32")
- },
- "qsubq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vqsubs.v2i64")
- },
- "qsubq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vqsubu.v2i64")
- },
- "rsubhn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vrsubhn.v8i8")
- },
- "rsubhn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vrsubhn.v8i8")
- },
- "rsubhn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vrsubhn.v4i16")
- },
- "rsubhn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vrsubhn.v4i16")
- },
- "rsubhn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vrsubhn.v2i32")
- },
- "rsubhn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrsubhn.v2i32")
- },
- "abd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vabds.v8i8")
- },
- "abd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vabdu.v8i8")
- },
- "abd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vabds.v4i16")
- },
- "abd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vabdu.v4i16")
- },
- "abd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vabds.v2i32")
- },
- "abd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vabdu.v2i32")
- },
- "abd_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vabdf.v2f32")
- },
- "abdq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vabds.v16i8")
- },
- "abdq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vabdu.v16i8")
- },
- "abdq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vabds.v8i16")
- },
- "abdq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vabdu.v8i16")
- },
- "abdq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vabds.v4i32")
- },
- "abdq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vabdu.v4i32")
- },
- "abdq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vabdf.v4f32")
- },
- "max_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vmaxs.v8i8")
- },
- "max_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vmaxu.v8i8")
- },
- "max_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vmaxs.v4i16")
- },
- "max_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vmaxu.v4i16")
- },
- "max_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vmaxs.v2i32")
- },
- "max_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vmaxu.v2i32")
- },
- "max_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vmaxf.v2f32")
- },
- "maxq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vmaxs.v16i8")
- },
- "maxq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vmaxu.v16i8")
- },
- "maxq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vmaxs.v8i16")
- },
- "maxq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vmaxu.v8i16")
- },
- "maxq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vmaxs.v4i32")
- },
- "maxq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vmaxu.v4i32")
- },
- "maxq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vmaxf.v4f32")
- },
- "min_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vmins.v8i8")
- },
- "min_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vminu.v8i8")
- },
- "min_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vmins.v4i16")
- },
- "min_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vminu.v4i16")
- },
- "min_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vmins.v2i32")
- },
- "min_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vminu.v2i32")
- },
- "min_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vminf.v2f32")
- },
- "minq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vmins.v16i8")
- },
- "minq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vminu.v16i8")
- },
- "minq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vmins.v8i16")
- },
- "minq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vminu.v8i16")
- },
- "minq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vmins.v4i32")
- },
- "minq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vminu.v4i32")
- },
- "minq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vminf.v4f32")
- },
- "shl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vshls.v8i8")
- },
- "shl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vshlu.v8i8")
- },
- "shl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vshls.v4i16")
- },
- "shl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vshlu.v4i16")
- },
- "shl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vshls.v2i32")
- },
- "shl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vshlu.v2i32")
- },
- "shl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vshls.v1i64")
- },
- "shl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vshlu.v1i64")
- },
- "shlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vshls.v16i8")
- },
- "shlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vshlu.v16i8")
- },
- "shlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vshls.v8i16")
- },
- "shlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vshlu.v8i16")
- },
- "shlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vshls.v4i32")
- },
- "shlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vshlu.v4i32")
- },
- "shlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vshls.v2i64")
- },
- "shlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vshlu.v2i64")
- },
- "qshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqshls.v8i8")
- },
- "qshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqshlu.v8i8")
- },
- "qshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqshls.v4i16")
- },
- "qshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqshlu.v4i16")
- },
- "qshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqshls.v2i32")
- },
- "qshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqshlu.v2i32")
- },
- "qshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vqshls.v1i64")
- },
- "qshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vqshlu.v1i64")
- },
- "qshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vqshls.v16i8")
- },
- "qshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vqshlu.v16i8")
- },
- "qshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vqshls.v8i16")
- },
- "qshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vqshlu.v8i16")
- },
- "qshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vqshls.v4i32")
- },
- "qshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vqshlu.v4i32")
- },
- "qshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vqshls.v2i64")
- },
- "qshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vqshlu.v2i64")
- },
- "rshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vrshls.v8i8")
- },
- "rshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vrshlu.v8i8")
- },
- "rshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vrshls.v4i16")
- },
- "rshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vrshlu.v4i16")
- },
- "rshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vrshls.v2i32")
- },
- "rshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrshlu.v2i32")
- },
- "rshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vrshls.v1i64")
- },
- "rshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vrshlu.v1i64")
- },
- "rshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vrshls.v16i8")
- },
- "rshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vrshlu.v16i8")
- },
- "rshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vrshls.v8i16")
- },
- "rshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vrshlu.v8i16")
- },
- "rshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vrshls.v4i32")
- },
- "rshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vrshlu.v4i32")
- },
- "rshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vrshls.v2i64")
- },
- "rshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vrshlu.v2i64")
- },
- "qrshl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqrshls.v8i8")
- },
- "qrshl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqrshlu.v8i8")
- },
- "qrshl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqrshls.v4i16")
- },
- "qrshl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqrshlu.v4i16")
- },
- "qrshl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqrshls.v2i32")
- },
- "qrshl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqrshlu.v2i32")
- },
- "qrshl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vqrshls.v1i64")
- },
- "qrshl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vqrshlu.v1i64")
- },
- "qrshlq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vqrshls.v16i8")
- },
- "qrshlq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vqrshlu.v16i8")
- },
- "qrshlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vqrshls.v8i16")
- },
- "qrshlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vqrshlu.v8i16")
- },
- "qrshlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vqrshls.v4i32")
- },
- "qrshlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vqrshlu.v4i32")
- },
- "qrshlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vqrshls.v2i64")
- },
- "qrshlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vqrshlu.v2i64")
- },
- "qshrun_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vsqshrun.v8i8")
- },
- "qshrun_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqshrun.v4i16")
- },
- "qshrun_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqshrun.v2i32")
- },
- "qrshrun_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vsqrshrun.v8i8")
- },
- "qrshrun_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqrshrun.v4i16")
- },
- "qrshrun_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqrshrun.v2i32")
- },
- "qshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqshrns.v8i8")
- },
- "qshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqshrnu.v8i8")
- },
- "qshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqshrns.v4i16")
- },
- "qshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqshrnu.v4i16")
- },
- "qshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqshrns.v2i32")
- },
- "qshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqshrnu.v2i32")
- },
- "rshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vrshrn.v8i8")
- },
- "rshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vrshrn.v8i8")
- },
- "rshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vrshrn.v4i16")
- },
- "rshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vrshrn.v4i16")
- },
- "rshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vrshrn.v2i32")
- },
- "rshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrshrn.v2i32")
- },
- "qrshrn_n_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::U32]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqrshrns.v8i8")
- },
- "qrshrn_n_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U32]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqrshrnu.v8i8")
- },
- "qrshrn_n_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::U32]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqrshrns.v4i16")
- },
- "qrshrn_n_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqrshrnu.v4i16")
- },
- "qrshrn_n_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::U32]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqrshrns.v2i32")
- },
- "qrshrn_n_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqrshrnu.v2i32")
- },
- "sri_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vvsri.v8i8")
- },
- "sri_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vvsri.v8i8")
- },
- "sri_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vvsri.v4i16")
- },
- "sri_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vvsri.v4i16")
- },
- "sri_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vvsri.v2i32")
- },
- "sri_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vvsri.v2i32")
- },
- "sri_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vvsri.v1i64")
- },
- "sri_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vvsri.v1i64")
- },
- "sriq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vvsri.v16i8")
- },
- "sriq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vvsri.v16i8")
- },
- "sriq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vvsri.v8i16")
- },
- "sriq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vvsri.v8i16")
- },
- "sriq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vvsri.v4i32")
- },
- "sriq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vvsri.v4i32")
- },
- "sriq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vvsri.v2i64")
- },
- "sriq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vvsri.v2i64")
- },
- "sli_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vvsli.v8i8")
- },
- "sli_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vvsli.v8i8")
- },
- "sli_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vvsli.v4i16")
- },
- "sli_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vvsli.v4i16")
- },
- "sli_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vvsli.v2i32")
- },
- "sli_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vvsli.v2i32")
- },
- "sli_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vvsli.v1i64")
- },
- "sli_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vvsli.v1i64")
- },
- "sliq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vvsli.v16i8")
- },
- "sliq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vvsli.v16i8")
- },
- "sliq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vvsli.v8i16")
- },
- "sliq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vvsli.v8i16")
- },
- "sliq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vvsli.v4i32")
- },
- "sliq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vvsli.v4i32")
- },
- "sliq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vvsli.v2i64")
- },
- "sliq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vvsli.v2i64")
- },
- "vqmovn_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vqxtns.v8i8")
- },
- "vqmovn_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vqxtnu.v8i8")
- },
- "vqmovn_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vqxtns.v4i16")
- },
- "vqmovn_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vqxtnu.v4i16")
- },
- "vqmovn_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I64x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vqxtns.v2i32")
- },
- "vqmovn_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U64x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vqxtnu.v2i32")
- },
- "abs_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vabs.v8i8")
- },
- "abs_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vabs.v4i16")
- },
- "abs_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vabs.v2i32")
- },
- "absq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vabs.v16i8")
- },
- "absq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vabs.v8i16")
- },
- "absq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vabs.v4i32")
- },
- "abs_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.fabs.v2f32")
- },
- "absq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.fabs.v4f32")
- },
- "qabs_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vsqabs.v8i8")
- },
- "qabs_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqabs.v4i16")
- },
- "qabs_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqabs.v2i32")
- },
- "qabsq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vsqabs.v16i8")
- },
- "qabsq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqabs.v8i16")
- },
- "qabsq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqabs.v4i32")
- },
- "qneg_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vsqneg.v8i8")
- },
- "qneg_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vsqneg.v4i16")
- },
- "qneg_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vsqneg.v2i32")
- },
- "qnegq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vsqneg.v16i8")
- },
- "qnegq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vsqneg.v8i16")
- },
- "qnegq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vsqneg.v4i32")
- },
- "clz_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.ctlz.v8i8")
- },
- "clz_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.ctlz.v8i8")
- },
- "clz_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.ctlz.v4i16")
- },
- "clz_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.ctlz.v4i16")
- },
- "clz_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.ctlz.v2i32")
- },
- "clz_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.ctlz.v2i32")
- },
- "clzq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ctlz.v16i8")
- },
- "clzq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ctlz.v16i8")
- },
- "clzq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ctlz.v8i16")
- },
- "clzq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ctlz.v8i16")
- },
- "clzq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ctlz.v4i32")
- },
- "clzq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ctlz.v4i32")
- },
- "cls_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vcls.v8i8")
- },
- "cls_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vcls.v8i8")
- },
- "cls_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vcls.v4i16")
- },
- "cls_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vcls.v4i16")
- },
- "cls_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vcls.v2i32")
- },
- "cls_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vcls.v2i32")
- },
- "clsq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vcls.v16i8")
- },
- "clsq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vcls.v16i8")
- },
- "clsq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vcls.v8i16")
- },
- "clsq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vcls.v8i16")
- },
- "clsq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vcls.v4i32")
- },
- "clsq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vcls.v4i32")
- },
- "cnt_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.ctpop.v8i8")
- },
- "cnt_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.ctpop.v8i8")
- },
- "cntq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ctpop.v16i8")
- },
- "cntq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ctpop.v16i8")
- },
- "recpe_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrecpe.v2i32")
- },
- "recpe_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vrecpe.v2f32")
- },
- "recpeq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vrecpe.v4i32")
- },
- "recpeq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vrecpe.v4f32")
- },
- "recps_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vfrecps.v2f32")
- },
- "recpsq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vfrecps.v4f32")
- },
- "sqrt_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.sqrt.v2f32")
- },
- "sqrtq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.sqrt.v4f32")
- },
- "rsqrte_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vrsqrte.v2i32")
- },
- "rsqrte_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vrsqrte.v2f32")
- },
- "rsqrteq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vrsqrte.v4i32")
- },
- "rsqrteq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vrsqrte.v4f32")
- },
- "rsqrts_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vrsqrts.v2f32")
- },
- "rsqrtsq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vrsqrts.v4f32")
- },
- "bsl_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vbsl.v8i8")
- },
- "bsl_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vbsl.v8i8")
- },
- "bsl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vbsl.v4i16")
- },
- "bsl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vbsl.v4i16")
- },
- "bsl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vbsl.v2i32")
- },
- "bsl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vbsl.v2i32")
- },
- "bsl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::I64x1]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vbsl.v1i64")
- },
- "bsl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U64x1]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vbsl.v1i64")
- },
- "bslq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vbsl.v16i8")
- },
- "bslq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vbsl.v16i8")
- },
- "bslq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vbsl.v8i16")
- },
- "bslq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vbsl.v8i16")
- },
- "bslq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vbsl.v4i32")
- },
- "bslq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vbsl.v4i32")
- },
- "bslq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vbsl.v2i64")
- },
- "bslq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vbsl.v2i64")
- },
- "padd_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vpadd.v8i8")
- },
- "padd_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vpadd.v8i8")
- },
- "padd_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpadd.v4i16")
- },
- "padd_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpadd.v4i16")
- },
- "padd_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpadd.v2i32")
- },
- "padd_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpadd.v2i32")
- },
- "padd_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vpadd.v2f32")
- },
- "paddl_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x8]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpaddls.v4i16.v8i8")
- },
- "paddl_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x8]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpaddlu.v4i16.v8i8")
- },
- "paddl_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x4]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpaddls.v2i32.v4i16")
- },
- "paddl_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x4]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpaddlu.v2i32.v4i16")
- },
- "paddl_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x2]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vpaddls.v1i64.v2i32")
- },
- "paddl_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vpaddlu.v1i64.v2i32")
- },
- "paddlq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vpaddls.v8i16.v16i8")
- },
- "paddlq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vpaddlu.v8i16.v16i8")
- },
- "paddlq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vpaddls.v4i32.v8i16")
- },
- "paddlq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vpaddlu.v4i32.v8i16")
- },
- "paddlq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vpaddls.v2i64.v4i32")
- },
- "paddlq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vpaddlu.v2i64.v4i32")
- },
- "padal_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I8x8]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpadals.v4i16.v4i16")
- },
- "padal_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U8x8]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpadalu.v4i16.v4i16")
- },
- "padal_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I16x4]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpadals.v2i32.v2i32")
- },
- "padal_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U16x4]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpadalu.v2i32.v2i32")
- },
- "padal_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x1, &::I32x2]; &INPUTS },
- output: &::I64x1,
- definition: Named("llvm.arm.neon.vpadals.v1i64.v1i64")
- },
- "padal_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x1, &::U32x2]; &INPUTS },
- output: &::U64x1,
- definition: Named("llvm.arm.neon.vpadalu.v1i64.v1i64")
- },
- "padalq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vpadals.v8i16.v8i16")
- },
- "padalq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vpadalu.v8i16.v8i16")
- },
- "padalq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vpadals.v4i32.v4i32")
- },
- "padalq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vpadalu.v4i32.v4i32")
- },
- "padalq_s64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I64x2, &::I32x4]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.arm.neon.vpadals.v2i64.v2i64")
- },
- "padalq_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U32x4]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.arm.neon.vpadalu.v2i64.v2i64")
- },
- "pmax_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vpmaxs.v8i8")
- },
- "pmax_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vpmaxu.v8i8")
- },
- "pmax_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpmaxs.v4i16")
- },
- "pmax_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpmaxu.v4i16")
- },
- "pmax_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpmaxs.v2i32")
- },
- "pmax_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpmaxu.v2i32")
- },
- "pmax_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vpmaxf.v2f32")
- },
- "pmin_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vpmins.v8i8")
- },
- "pmin_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vpminu.v8i8")
- },
- "pmin_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x4, &::I16x4]; &INPUTS },
- output: &::I16x4,
- definition: Named("llvm.arm.neon.vpmins.v4i16")
- },
- "pmin_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x4, &::U16x4]; &INPUTS },
- output: &::U16x4,
- definition: Named("llvm.arm.neon.vpminu.v4i16")
- },
- "pmin_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x2, &::I32x2]; &INPUTS },
- output: &::I32x2,
- definition: Named("llvm.arm.neon.vpmins.v2i32")
- },
- "pmin_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.arm.neon.vpminu.v2i32")
- },
- "pmin_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x2, &::F32x2]; &INPUTS },
- output: &::F32x2,
- definition: Named("llvm.arm.neon.vpminf.v2f32")
- },
- "pminq_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.arm.neon.vpmins.v16i8")
- },
- "pminq_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.arm.neon.vpminu.v16i8")
- },
- "pminq_s16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.arm.neon.vpmins.v8i16")
- },
- "pminq_u16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.arm.neon.vpminu.v8i16")
- },
- "pminq_s32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.arm.neon.vpmins.v4i32")
- },
- "pminq_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.arm.neon.vpminu.v4i32")
- },
- "pminq_f32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.arm.neon.vpminf.v4f32")
- },
- "tbl1_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x8, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbl1")
- },
- "tbl1_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbl1")
- },
- "tbx1_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbx1")
- },
- "tbx1_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbx1")
- },
- "tbl2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbl2")
- },
- "tbl2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbl2")
- },
- "tbx2_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbx2")
- },
- "tbx2_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 2] = [&::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbx2")
- },
- "tbl3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbl3")
- },
- "tbl3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbl3")
- },
- "tbx3_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbx3")
- },
- "tbx3_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 3] = [&::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbx3")
- },
- "tbl4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x8, &::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbl4")
- },
- "tbl4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x8, &::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbl4")
- },
- "tbx4_s8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::I8x8, &::I8x8, &::I8x8, &::I8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::I8x8,
- definition: Named("llvm.arm.neon.vtbx4")
- },
- "tbx4_u8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x8, { static AGG: Type = Type::Aggregate(true, { static PARTS: [&'static Type; 4] = [&::U8x8, &::U8x8, &::U8x8, &::U8x8]; &PARTS }); &AGG }, &::U8x8]; &INPUTS },
- output: &::U8x8,
- definition: Named("llvm.arm.neon.vtbx4")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/hexagon.rs b/src/librustc_platform_intrinsics/hexagon.rs
deleted file mode 100644
index fd0f3a4..0000000
--- a/src/librustc_platform_intrinsics/hexagon.rs
+++ /dev/null
@@ -1,2924 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("Q6_") { return None }
- Some(match &name["Q6_".len()..] {
- "R_vextract64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x16, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.hexagon.V6.extractw")
- },
- "R_vextract128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.hexagon.V6.extractw.128B")
- },
- "V_lo64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.lo")
- },
- "V_lo128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x64]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.lo.128B")
- },
- "V_hi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.hi")
- },
- "V_hi128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x64]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.hi.128B")
- },
- "V_vsplat_R64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.lvsplatuw")
- },
- "V_vsplat_R128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.lvsplatuw.128B")
- },
- "Q_and_QQ64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.pred.and")
- },
- "Q_and_QQ128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.pred.and.128B")
- },
- "Q_not_Q64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.pred.not")
- },
- "Q_not_Q128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.pred.not.128B")
- },
- "Q_or_QQ64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.pred.or")
- },
- "Q_or_QQ128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.pred.or.128B")
- },
- "Q_xor_QQ64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32x2]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.pred.xor")
- },
- "Q_xor_QQ128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.pred.xor.128B")
- },
- "Vub_vabsdiff_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vabsdiffub")
- },
- "Vuh_vabsdiff_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vabsdiffuh")
- },
- "Vub_vabsdiff_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vabsdiffub.128B")
- },
- "Vuh_vabsdiff_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vabsdiffuh.128B")
- },
- "Vuh_vabsdiff_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vabsdiffh")
- },
- "Vuw_vabsdiff_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vabsdiffw")
- },
- "Vuh_vabsdiff_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vabsdiffh.128B")
- },
- "Vuw_vabsdiff_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vabsdiffw.128B")
- },
- "Vh_vabs_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vabsh")
- },
- "Vw_vabs_Vw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vabsw")
- },
- "Vh_vabs_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vabsh.128B")
- },
- "Vw_vabs_Vw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vabsw.128B")
- },
- "Vh_vabs_Vh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vabsh.sat")
- },
- "Vw_vabs_Vw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vabsw.sat")
- },
- "Vh_vabs_Vh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vabsh.sat.128B")
- },
- "Vw_vabs_Vw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vabsw.sat.128B")
- },
- "Vb_vadd_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vaddb")
- },
- "Vh_vadd_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaddh")
- },
- "Vw_vadd_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaddw")
- },
- "Vb_vadd_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vaddb.128B")
- },
- "Vh_vadd_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddh.128B")
- },
- "Vw_vadd_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddw.128B")
- },
- "Vh_vadd_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaddhsat")
- },
- "Vw_vadd_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaddwsat")
- },
- "Vh_vadd_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddhsat.128B")
- },
- "Vw_vadd_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddwsat.128B")
- },
- "Vub_vadd_VubVub_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vaddubsat")
- },
- "Vuh_vadd_VuhVuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vadduhsat")
- },
- "Vub_vadd_VubVub_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vaddubsat.128B")
- },
- "Vuh_vadd_VuhVuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vadduhsat.128B")
- },
- "Wb_vadd_WbWb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vaddb.dv")
- },
- "Wh_vadd_WhWh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddh.dv")
- },
- "Ww_vadd_WwWw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddw.dv")
- },
- "Wb_vadd_WbWb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x256, &::I8x256]; &INPUTS },
- output: &::I8x256,
- definition: Named("llvm.hexagon.V6.vaddb.dv.128B")
- },
- "Wh_vadd_WhWh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I16x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vaddh.dv.128B")
- },
- "Ww_vadd_WwWw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I32x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vaddw.dv.128B")
- },
- "Wh_vadd_WhWh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddhsat.dv")
- },
- "Ww_vadd_WwWw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddwsat.dv")
- },
- "Wh_vadd_WhWh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I16x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vaddhsat.dv.128B")
- },
- "Ww_vadd_WwWw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I32x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vaddwsat.dv.128B")
- },
- "Wub_vadd_WubWub_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vaddubsat.dv")
- },
- "Wuh_vadd_WuhWuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vadduhsat.dv")
- },
- "Wub_vadd_WubWub_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U8x256]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vaddubsat.dv.128B")
- },
- "Wuh_vadd_WuhWuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x128, &::U16x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vadduhsat.dv.128B")
- },
- "V_valign_VVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.valignb")
- },
- "V_valign_VVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.valignb.128B")
- },
- "V_valign_VVI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.valignbi")
- },
- "V_valign_VVI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.valignbi.128B")
- },
- "V_vlalign_VVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vlalignb")
- },
- "V_vlalign_VVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vlalignb.128B")
- },
- "V_vlalign_VVI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vlalignbi")
- },
- "V_vlalign_VVI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vlalignbi.128B")
- },
- "V_vand_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vand")
- },
- "V_vand_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vand.128B")
- },
- "V_vand_QR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x2, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vandqrt")
- },
- "V_vand_QR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vandqrt.128B")
- },
- "V_vandor_VQR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U32x2, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vandqrt.acc")
- },
- "V_vandor_VQR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U32x4, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vandqrt.acc.128B")
- },
- "Q_vand_VR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vandvrt")
- },
- "Q_vand_VR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vandvrt.128B")
- },
- "Q_vandor_QVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vandvrt")
- },
- "Q_vandor_QVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vandvrt.128B")
- },
- "Vh_vasl_VhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaslh")
- },
- "Vw_vasl_VwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaslw")
- },
- "Vh_vasl_VhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaslh.128B")
- },
- "Vw_vasl_VwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaslw.128B")
- },
- "Vh_vasl_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaslhv")
- },
- "Vw_vasl_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaslwv")
- },
- "Vh_vasl_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaslhv.128B")
- },
- "Vw_vasl_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaslwv.128B")
- },
- "Vw_vaslacc_VwVwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaslw.acc")
- },
- "Vw_vaslacc_VwVwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaslw.acc.128B")
- },
- "Vh_vasr_VhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrh")
- },
- "Vw_vasr_VwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vasrw")
- },
- "Vh_vasr_VhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrh.128B")
- },
- "Vw_vasr_VwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vasrw.128B")
- },
- "Vh_vasr_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrhv")
- },
- "Vw_vasr_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vasrwv")
- },
- "Vh_vasr_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrhv.128B")
- },
- "Vw_vasr_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vasrwv.128B")
- },
- "Vw_vasracc_VwVwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vasrw.acc")
- },
- "Vw_vasracc_VwVwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vasrw.acc.128B")
- },
- "Vh_vasr_VwVwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrhw")
- },
- "Vh_vasr_VwVwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrhw.128B")
- },
- "Vb_vasr_VhVhR_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vasrhbsat")
- },
- "Vub_vasr_VhVhR_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vasrhbsat")
- },
- "Vh_vasr_VwVwR_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrwhsat")
- },
- "Vuh_vasr_VwVwR_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vasrwhsat")
- },
- "Vb_vasr_VhVhR_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vasrhbsat.128B")
- },
- "Vub_vasr_VhVhR_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vasrhbsat.128B")
- },
- "Vh_vasr_VwVwR_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrwhsat.128B")
- },
- "Vuh_vasr_VwVwR_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vasrwhsat.128B")
- },
- "Vb_vasr_VhVhR_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vasrhbrndsat")
- },
- "Vub_vasr_VhVhR_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vasrhbrndsat")
- },
- "Vh_vasr_VwVwR_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vasrwhrndsat")
- },
- "Vuh_vasr_VwVwR_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vasrwhrndsat")
- },
- "Vb_vasr_VhVhR_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vasrhbrndsat.128B")
- },
- "Vub_vasr_VhVhR_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vasrhbrndsat.128B")
- },
- "Vh_vasr_VwVwR_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vasrwhrndsat.128B")
- },
- "Vuh_vasr_VwVwR_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vasrwhrndsat.128B")
- },
- "V_equals_V64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vassign")
- },
- "V_equals_V128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vassign.128B")
- },
- "W_equals_W64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vassignp")
- },
- "W_equals_W128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vassignp.128B")
- },
- "Vh_vavg_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vavgh")
- },
- "Vw_vavg_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vavgw")
- },
- "Vh_vavg_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vavgh.128B")
- },
- "Vw_vavg_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vavgw.128B")
- },
- "Vub_vavg_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vavgub")
- },
- "Vuh_vavg_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vavguh")
- },
- "Vub_vavg_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vavgub.128B")
- },
- "Vuh_vavg_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vavguh.128B")
- },
- "Vh_vavg_VhVh_rnd64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vavgrndh")
- },
- "Vw_vavg_VwVw_rnd64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vavgrndw")
- },
- "Vh_vavg_VhVh_rnd128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vavgrndh.128B")
- },
- "Vw_vavg_VwVw_rnd128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vavgrndw.128B")
- },
- "Vub_vavg_VubVub_rnd64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vavgrndub")
- },
- "Vuh_vavg_VuhVuh_rnd64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vavgrnduh")
- },
- "Vub_vavg_VubVub_rnd128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vavgrndub.128B")
- },
- "Vuh_vavg_VuhVuh_rnd128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vavgrnduh.128B")
- },
- "Vuh_vcl0_Vuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vcl0h")
- },
- "Vuw_vcl0_Vuw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vcl0w")
- },
- "Vuh_vcl0_Vuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vcl0h.128B")
- },
- "Vuw_vcl0_Vuw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vcl0w.128B")
- },
- "W_vcombine_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vcombine")
- },
- "W_vcombine_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vcombine.128B")
- },
- "V_vzero64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vd0")
- },
- "V_vzero128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vd0.128B")
- },
- "Vb_vdeal_Vb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vdealb")
- },
- "Vh_vdeal_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vdealh")
- },
- "Vb_vdeal_Vb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vdealb.128B")
- },
- "Vh_vdeal_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdealh.128B")
- },
- "Vb_vdeale_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vdealb4w")
- },
- "Vb_vdeale_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vdealb4w.128B")
- },
- "W_vdeal_VVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vdealvdd")
- },
- "W_vdeal_VVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vdealvdd.128B")
- },
- "V_vdelta_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vdelta")
- },
- "V_vdelta_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vdelta.128B")
- },
- "Vh_vdmpy_VubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vdmpybus")
- },
- "Vh_vdmpy_VubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdmpybus.128B")
- },
- "Vh_vdmpyacc_VhVubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::U8x64, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vdmpybus.acc")
- },
- "Vh_vdmpyacc_VhVubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdmpybus.acc.128B")
- },
- "Wh_vdmpy_WubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdmpybus.dv")
- },
- "Wh_vdmpy_WubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vdmpybus.dv.128B")
- },
- "Wh_vdmpyacc_WhWubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vdmpybus.dv.acc")
- },
- "Wh_vdmpyacc_WhWubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vdmpybus.dv.acc.128B")
- },
- "Vw_vdmpy_VhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhb")
- },
- "Vw_vdmpy_VhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhb.128B")
- },
- "Vw_vdmpyacc_VwVhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhb.acc")
- },
- "Vw_vdmpyacc_VwVhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhb.acc.128B")
- },
- "Ww_vdmpy_WhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhb.dv")
- },
- "Ww_vdmpy_WhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vdmpyhb.dv.128B")
- },
- "Ww_vdmpyacc_WwWhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhb.dv.acc")
- },
- "Ww_vdmpyacc_WwWhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vdmpyhb.dv.acc.128B")
- },
- "Vw_vdmpy_WwRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhisat")
- },
- "Vw_vdmpy_WwRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhisat.128B")
- },
- "Vw_vdmpy_VhRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsat")
- },
- "Vw_vdmpy_VhRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsat.128B")
- },
- "Vw_vdmpy_WhRuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsuisat")
- },
- "Vw_vdmpy_WhRuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsuisat.128B")
- },
- "Vw_vdmpy_VhRuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsusat")
- },
- "Vw_vdmpy_VhRuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsusat.128B")
- },
- "Vw_vdmpy_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhvsat")
- },
- "Vw_vdmpy_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhvsat.128B")
- },
- "Vw_vdmpyacc_VwWwRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhisat_acc")
- },
- "Vw_vdmpyacc_VwWwRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhisat_acc.128B")
- },
- "Wuw_vdsad_WuhRuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vdsaduh")
- },
- "Wuw_vdsad_WuhRuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x128, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vdsaduh.128B")
- },
- "Wuw_vdsadacc_WuwWuhRuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U16x64, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vdsaduh.acc")
- },
- "Wuw_vdsadacc_WuwWuhRuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U16x128, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vdsaduh.acc.128B")
- },
- "Vw_vdmpyacc_VwVhRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsat_acc")
- },
- "Vw_vdmpyacc_VwVhRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsat_acc.128B")
- },
- "Vw_vdmpyacc_VwWhRuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsuisat_acc")
- },
- "Vw_vdmpyacc_VwWhRuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsuisat_acc.128B")
- },
- "Vw_vdmpyacc_VwVhRuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhsusat_acc")
- },
- "Vw_vdmpyacc_VwVhRuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhsusat_acc.128B")
- },
- "Vw_vdmpyacc_VwVhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vdmpyhvsat_acc")
- },
- "Vw_vdmpyacc_VwVhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vdmpyhvsat_acc.128B")
- },
- "Q_vcmp_eq_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqb")
- },
- "Q_vcmp_eq_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqh")
- },
- "Q_vcmp_eq_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqw")
- },
- "Q_vcmp_eq_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqb.128B")
- },
- "Q_vcmp_eq_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqh.128B")
- },
- "Q_vcmp_eq_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqw.128B")
- },
- "Q_vcmp_eqand_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqb.and")
- },
- "Q_vcmp_eqand_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqh.and")
- },
- "Q_vcmp_eqand_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqw.and")
- },
- "Q_vcmp_eqand_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqb.and.128B")
- },
- "Q_vcmp_eqand_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqh.and.128B")
- },
- "Q_vcmp_eqand_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqw.and.128B")
- },
- "Q_vcmp_eqor_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqb.or")
- },
- "Q_vcmp_eqor_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqh.or")
- },
- "Q_vcmp_eqor_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqw.or")
- },
- "Q_vcmp_eqor_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqb.or.128B")
- },
- "Q_vcmp_eqor_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqh.or.128B")
- },
- "Q_vcmp_eqor_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqw.or.128B")
- },
- "Q_vcmp_eqxacc_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqb.xor")
- },
- "Q_vcmp_eqxacc_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqh.xor")
- },
- "Q_vcmp_eqxacc_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.veqw.xor")
- },
- "Q_vcmp_eqxacc_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqb.xor.128B")
- },
- "Q_vcmp_eqxacc_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqh.xor.128B")
- },
- "Q_vcmp_eqxacc_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.veqw.xor.128B")
- },
- "Q_vcmp_gt_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtb")
- },
- "Q_vcmp_gt_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgth")
- },
- "Q_vcmp_gt_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtw")
- },
- "Q_vcmp_gt_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtb.128B")
- },
- "Q_vcmp_gt_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgth.128B")
- },
- "Q_vcmp_gt_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtw.128B")
- },
- "Q_vcmp_gt_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtub")
- },
- "Q_vcmp_gt_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtuh")
- },
- "Q_vcmp_gt_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtub.128B")
- },
- "Q_vcmp_gt_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtuh.128B")
- },
- "Q_vcmp_gtand_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtb.and")
- },
- "Q_vcmp_gtand_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgth.and")
- },
- "Q_vcmp_gtand_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtw.and")
- },
- "Q_vcmp_gtand_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtb.and.128B")
- },
- "Q_vcmp_gtand_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgth.and.128B")
- },
- "Q_vcmp_gtand_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtw.and.128B")
- },
- "Q_vcmp_gtand_QVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtub.and")
- },
- "Q_vcmp_gtand_QVuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtuh.and")
- },
- "Q_vcmp_gtand_QVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtub.and.128B")
- },
- "Q_vcmp_gtand_QVuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtuh.and.128B")
- },
- "Q_vcmp_gtor_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtb.or")
- },
- "Q_vcmp_gtor_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgth.or")
- },
- "Q_vcmp_gtor_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtw.or")
- },
- "Q_vcmp_gtor_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtb.or.128B")
- },
- "Q_vcmp_gtor_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgth.or.128B")
- },
- "Q_vcmp_gtor_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtw.or.128B")
- },
- "Q_vcmp_gtor_QVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtub.or")
- },
- "Q_vcmp_gtor_QVuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtuh.or")
- },
- "Q_vcmp_gtor_QVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtub.or.128B")
- },
- "Q_vcmp_gtor_QVuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtuh.or.128B")
- },
- "Q_vcmp_gtxacc_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtb.xor")
- },
- "Q_vcmp_gtxacc_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgth.xor")
- },
- "Q_vcmp_gtxacc_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtw.xor")
- },
- "Q_vcmp_gtxacc_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtb.xor.128B")
- },
- "Q_vcmp_gtxacc_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgth.xor.128B")
- },
- "Q_vcmp_gtxacc_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtw.xor.128B")
- },
- "Q_vcmp_gtxacc_QVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtub.xor")
- },
- "Q_vcmp_gtxacc_QVuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x2,
- definition: Named("llvm.hexagon.V6.vgtuh.xor")
- },
- "Q_vcmp_gtxacc_QVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtub.xor.128B")
- },
- "Q_vcmp_gtxacc_QVuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.hexagon.V6.vgtuh.xor.128B")
- },
- "Vw_vinsert_VwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vinsertwr")
- },
- "Vw_vinsert_VwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vinsertwr.128B")
- },
- "Vuh_vlsr_VuhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vlsrh")
- },
- "Vuw_vlsr_VuwR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x16, &::U32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vlsrw")
- },
- "Vuh_vlsr_VuhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vlsrh.128B")
- },
- "Vuw_vlsr_VuwR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x32, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vlsrw.128B")
- },
- "Vh_vlsr_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vlsrhv")
- },
- "Vw_vlsr_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vlsrwv")
- },
- "Vh_vlsr_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vlsrhv.128B")
- },
- "Vw_vlsr_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vlsrwv.128B")
- },
- "Vb_vlut32_VbVbR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x64, &::I8x64, &::U32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vlutvvb")
- },
- "Vb_vlut32_VbVbR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x128, &::I8x128, &::U32]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vlutvvb.128B")
- },
- "Wh_vlut16_VbVhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x64, &::I16x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vlutvwh")
- },
- "Wh_vlut16_VbVhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x128, &::I16x64, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vlutvwh.128B")
- },
- "Vb_vlut32or_VbVbVbR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 4] = [&::I8x64, &::I8x64, &::I8x64, &::U32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vlutvvb.oracc")
- },
- "Vb_vlut32or_VbVbVbR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 4] = [&::I8x128, &::I8x128, &::I8x128, &::U32]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vlutvvb.oracc.128B")
- },
- "Wh_vlut16or_WhVbVhR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 4] = [&::I16x64, &::I8x64, &::I16x32, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vlutvwh.oracc")
- },
- "Wh_vlut16or_WhVbVhR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 4] = [&::I16x128, &::I8x128, &::I16x64, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vlutvwh.oracc.128B")
- },
- "Vh_vmax_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmaxh")
- },
- "Vw_vmax_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmaxw")
- },
- "Vh_vmax_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmaxh.128B")
- },
- "Vw_vmax_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmaxw.128B")
- },
- "Vub_vmax_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vmaxub")
- },
- "Vuh_vmax_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vmaxuh")
- },
- "Vub_vmax_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vmaxub.128B")
- },
- "Vuh_vmax_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmaxuh.128B")
- },
- "Vh_vmin_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vminh")
- },
- "Vw_vmin_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vminw")
- },
- "Vh_vmin_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vminh.128B")
- },
- "Vw_vmin_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vminw.128B")
- },
- "Vub_vmin_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vminub")
- },
- "Vuh_vmin_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vminuh")
- },
- "Vub_vmin_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vminub.128B")
- },
- "Vuh_vmin_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vminuh.128B")
- },
- "Wh_vmpa_WubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpabus")
- },
- "Wh_vmpa_WubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpabus.128B")
- },
- "Wh_vmpaacc_WhWubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpabus.acc")
- },
- "Wh_vmpaacc_WhWubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpabus.acc.128B")
- },
- "Wh_vmpa_WubWb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::I8x128]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpabusv")
- },
- "Wh_vmpa_WubWub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpabuuv")
- },
- "Wh_vmpa_WubWb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::I8x256]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpabusv.128B")
- },
- "Wh_vmpa_WubWub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U8x256]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpabuuv.128B")
- },
- "Ww_vmpa_WhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpahb")
- },
- "Ww_vmpa_WhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpahb.128B")
- },
- "Ww_vmpaacc_WwWhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpahb.acc")
- },
- "Ww_vmpaacc_WwWhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpahb.acc.128B")
- },
- "Wh_vmpy_VbVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::U8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybus")
- },
- "Ww_vmpy_VhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhus")
- },
- "Wh_vmpy_VbVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::U8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybus.128B")
- },
- "Ww_vmpy_VhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhus.128B")
- },
- "Wh_vmpyacc_WhVbVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I8x64, &::U8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybus.acc")
- },
- "Ww_vmpyacc_WwVhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x32, &::U16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhus.acc")
- },
- "Wh_vmpyacc_WhVbVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::I8x128, &::U8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybus.acc.128B")
- },
- "Ww_vmpyacc_WwVhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x64, &::U16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhus.acc.128B")
- },
- "Wh_vmpy_VubVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybusv")
- },
- "Wh_vmpy_VubVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybusv.128B")
- },
- "Wh_vmpyacc_WhVubVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybusv.acc")
- },
- "Wh_vmpyacc_WhVubVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::U8x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybusv.acc.128B")
- },
- "Wh_vmpy_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybv")
- },
- "Wuh_vmpy_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmpyubv")
- },
- "Ww_vmpy_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhv")
- },
- "Wuw_vmpy_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmpyuhv")
- },
- "Wh_vmpy_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybv.128B")
- },
- "Wuh_vmpy_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vmpyubv.128B")
- },
- "Ww_vmpy_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhv.128B")
- },
- "Wuw_vmpy_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vmpyuhv.128B")
- },
- "Wh_vmpyacc_WhVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpybv.acc")
- },
- "Wuh_vmpyacc_WuhVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x64, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmpyubv.acc")
- },
- "Ww_vmpyacc_WwVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhv.acc")
- },
- "Wuw_vmpyacc_WuwVuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U16x32, &::U16x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmpyuhv.acc")
- },
- "Wh_vmpyacc_WhVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vmpybv.acc.128B")
- },
- "Wuh_vmpyacc_WuhVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x128, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vmpyubv.acc.128B")
- },
- "Ww_vmpyacc_WwVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhv.acc.128B")
- },
- "Wuw_vmpyacc_WuwVuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U16x64, &::U16x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vmpyuhv.acc.128B")
- },
- "Vw_vmpye_VwVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyewuh")
- },
- "Vw_vmpye_VwVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyewuh.128B")
- },
- "Ww_vmpy_VhRh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyh")
- },
- "Wuw_vmpy_VuhRuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmpyuh")
- },
- "Ww_vmpy_VhRh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyh.128B")
- },
- "Wuw_vmpy_VuhRuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vmpyuh.128B")
- },
- "Ww_vmpyacc_WwVhRh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhsat.acc")
- },
- "Ww_vmpyacc_WwVhRh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vmpyhsat.acc.128B")
- },
- "Vw_vmpy_VhRh_s1_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyhsrs")
- },
- "Vw_vmpy_VhRh_s1_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhsrs.128B")
- },
- "Vw_vmpy_VhRh_s1_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyhss")
- },
- "Vw_vmpy_VhRh_s1_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyhss.128B")
- },
- "Vh_vmpy_VhVh_s1_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyhvsrs")
- },
- "Vh_vmpy_VhVh_s1_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyhvsrs.128B")
- },
- "Vw_vmpyieo_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyieoh")
- },
- "Vw_vmpyieo_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyieoh.128B")
- },
- "Vw_vmpyieacc_VwVwVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiewh.acc")
- },
- "Vw_vmpyieacc_VwVwVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiewuh.acc")
- },
- "Vw_vmpyieacc_VwVwVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiewh.acc.128B")
- },
- "Vw_vmpyieacc_VwVwVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiewuh.acc.128B")
- },
- "Vw_vmpyie_VwVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiewuh")
- },
- "Vw_vmpyie_VwVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiewuh.128B")
- },
- "Vh_vmpyi_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyih")
- },
- "Vh_vmpyi_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyih.128B")
- },
- "Vh_vmpyiacc_VhVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyih.acc")
- },
- "Vh_vmpyiacc_VhVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyih.acc.128B")
- },
- "Vh_vmpyi_VhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyihb")
- },
- "Vw_vmpyi_VwRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwb")
- },
- "Vh_vmpyi_VhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyihb.128B")
- },
- "Vw_vmpyi_VwRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwb.128B")
- },
- "Vh_vmpyiacc_VhVhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x32, &::I16x32, &::U32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vmpyihb.acc")
- },
- "Vw_vmpyiacc_VwVwRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwb.acc")
- },
- "Vh_vmpyiacc_VhVhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I16x64, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vmpyihb.acc.128B")
- },
- "Vw_vmpyiacc_VwVwRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwb.acc.128B")
- },
- "Vw_vmpyi_VwRh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwh")
- },
- "Vw_vmpyi_VwRh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwh.128B")
- },
- "Vw_vmpyiacc_VwVwRh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwh.acc")
- },
- "Vw_vmpyiacc_VwVwRh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwh.acc.128B")
- },
- "Vw_vmpyi_VwRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwub")
- },
- "Vw_vmpyi_VwRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwub.128B")
- },
- "Vw_vmpyiacc_VwVwRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I32x16, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiwub.acc")
- },
- "Vw_vmpyiacc_VwVwRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I32x32, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiwub.acc.128B")
- },
- "Vw_vmpyo_VwVh_s1_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyowh")
- },
- "Vw_vmpyo_VwVh_s1_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyowh.128B")
- },
- "Vw_vmpyo_VwVh_s1_rnd_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyowh.rnd")
- },
- "Vw_vmpyo_VwVh_s1_rnd_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyowh.rnd.128B")
- },
- "Vw_vmpyo_VwVh_s1_rnd_sat_shift64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyowh.rnd.sacc")
- },
- "Vw_vmpyo_VwVh_s1_rnd_sat_shift128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyowh.rnd.sacc.128B")
- },
- "Vw_vmpyo_VwVh_s1_sat_shift64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyowh.sacc")
- },
- "Vw_vmpyo_VwVh_s1_sat_shift128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyowh.sacc.128B")
- },
- "Vw_vmpyio_VwVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I16x32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vmpyiowh")
- },
- "Vw_vmpyio_VwVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x64]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vmpyiowh.128B")
- },
- "Wuh_vmpy_VubRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmpyub")
- },
- "Wuh_vmpy_VubRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vmpyub.128B")
- },
- "Wuh_vmpyacc_WuhVubRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vmpyub.acc")
- },
- "Wuw_vmpyacc_WuwVuhRuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U16x32, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmpyuh.acc")
- },
- "Wuh_vmpyacc_WuhVubRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vmpyub.acc.128B")
- },
- "Wuw_vmpyacc_WuwVuhRuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U16x64, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vmpyuh.acc.128B")
- },
- "Vuw_vmux_QVV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U32x16, &::U32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vmux")
- },
- "Vuw_vmux_QVV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U32x32, &::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vmux.128B")
- },
- "Vh_vnavg_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vnavgh")
- },
- "Vuh_vnavg_VuhVuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vnavguh")
- },
- "Vw_vnavg_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vnavgw")
- },
- "Vuw_vnavg_VuwVuw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x16, &::U32x16]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vnavguw")
- },
- "Vh_vnavg_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vnavgh.128B")
- },
- "Vuh_vnavg_VuhVuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vnavguh.128B")
- },
- "Vw_vnavg_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vnavgw.128B")
- },
- "Vuw_vnavg_VuwVuw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x32, &::U32x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vnavguw.128B")
- },
- "Vub_vnavg_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vnavgub")
- },
- "Vub_vnavg_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vnavgub.128B")
- },
- "Vh_vnormamt_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vnormamth")
- },
- "Vw_vnormamt_Vw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vnormamtw")
- },
- "Vh_vnormamt_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vnormamth.128B")
- },
- "Vw_vnormamt_Vw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vnormamtw.128B")
- },
- "V_vnot_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vnot")
- },
- "V_vnot_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vnot.128B")
- },
- "V_vor_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vor")
- },
- "V_vor_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vor.128B")
- },
- "Vb_vpacke_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vpackhe")
- },
- "Vh_vpacke_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vpackwe")
- },
- "Vb_vpacke_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vpackhe.128B")
- },
- "Vh_vpacke_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vpackwe.128B")
- },
- "Vb_vpacko_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vpackho")
- },
- "Vh_vpacko_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vpackwo")
- },
- "Vb_vpacko_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vpackho.128B")
- },
- "Vh_vpacko_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vpackwo.128B")
- },
- "Vb_vpack_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vpackhb.sat")
- },
- "Vub_vpack_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vpackhub.sat")
- },
- "Vh_vpack_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vpackwh.sat")
- },
- "Vuh_vpack_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vpackwuh.sat")
- },
- "Vb_vpack_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vpackhb.sat.128B")
- },
- "Vub_vpack_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vpackhub.sat.128B")
- },
- "Vh_vpack_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vpackwh.sat.128B")
- },
- "Vuh_vpack_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vpackwuh.sat.128B")
- },
- "Vh_vpopcount_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vpopcounth")
- },
- "Vh_vpopcount_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vpopcounth.128B")
- },
- "V_vrdelta_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vrdelta")
- },
- "V_vrdelta_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vrdelta.128B")
- },
- "Vw_vrmpy_VubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybus")
- },
- "Vw_vrmpy_VubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybus.128B")
- },
- "Vw_vrmpyacc_VwVubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::U8x64, &::U32]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybus.acc")
- },
- "Vw_vrmpyacc_VwVubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybus.acc.128B")
- },
- "Ww_vrmpy_WubRbI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybusi")
- },
- "Ww_vrmpy_WubRbI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vrmpybusi.128B")
- },
- "Ww_vrmpyacc_WwWubRbI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybusi.acc")
- },
- "Ww_vrmpyacc_WwWubRbI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::U8x256, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vrmpybusi.acc.128B")
- },
- "Vw_vrmpy_VubVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::I8x64]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybusv")
- },
- "Vw_vrmpy_VubVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::I8x128]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybusv.128B")
- },
- "Vw_vrmpyacc_VwVubVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::U8x64, &::I8x64]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybusv.acc")
- },
- "Vw_vrmpyacc_VwVubVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::U8x128, &::I8x128]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybusv.acc.128B")
- },
- "Vw_vrmpy_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpybv")
- },
- "Vuw_vrmpy_VubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vrmpyubv")
- },
- "Vw_vrmpy_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpybv.128B")
- },
- "Vuw_vrmpy_VubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyubv.128B")
- },
- "Vw_vrmpyacc_VwVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x16, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vrmpywv.acc")
- },
- "Vuw_vrmpyacc_VuwVubVub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x16, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vrmpyuwv.acc")
- },
- "Vw_vrmpyacc_VwVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vrmpywv.acc.128B")
- },
- "Vuw_vrmpyacc_VuwVubVub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyuwv.acc.128B")
- },
- "Vuw_vrmpy_VubRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vrmpyub")
- },
- "Vuw_vrmpy_VubRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyub.128B")
- },
- "Vuw_vrmpyacc_VuwVubRub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x16, &::U8x64, &::U32]; &INPUTS },
- output: &::U32x16,
- definition: Named("llvm.hexagon.V6.vrmpyub.acc")
- },
- "Vuw_vrmpyacc_VuwVubRub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyub.acc.128B")
- },
- "Wuw_vrmpy_WubRubI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyubi")
- },
- "Wuw_vrmpy_WubRubI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vrmpyubi.128B")
- },
- "Wuw_vrmpyacc_WuwWubRubI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrmpyubi.acc")
- },
- "Wuw_vrmpyacc_WuwWubRubI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U8x256, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vrmpyubi.acc.128B")
- },
- "V_vror_VR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vror")
- },
- "V_vror_VR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vror.128B")
- },
- "Vb_vround_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vroundhb")
- },
- "Vub_vround_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vroundhub")
- },
- "Vh_vround_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vroundwh")
- },
- "Vuh_vround_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vroundwuh")
- },
- "Vb_vround_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vroundhb.128B")
- },
- "Vub_vround_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vroundhub.128B")
- },
- "Vh_vround_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vroundwh.128B")
- },
- "Vuh_vround_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vroundwuh.128B")
- },
- "Wuw_vrsad_WubRubI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrsadubi")
- },
- "Wuw_vrsad_WubRubI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vrsadubi.128B")
- },
- "Wuw_vrsadacc_WuwWubRubI64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x32, &::U8x128, &::U32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vrsadubi.acc")
- },
- "Wuw_vrsadacc_WuwWubRubI128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x64, &::U8x256, &::U32]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vrsadubi.acc.128B")
- },
- "Vub_vsat_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vsathub")
- },
- "Vub_vsat_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vsathub.128B")
- },
- "Vh_vsat_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsatwh")
- },
- "Vh_vsat_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsatwh.128B")
- },
- "Wh_vsxt_Vb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsb")
- },
- "Ww_vsxt_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsh")
- },
- "Wh_vsxt_Vb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vsb.128B")
- },
- "Ww_vsxt_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vsh.128B")
- },
- "Wuh_vzxt_Vub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vzb")
- },
- "Wuw_vzxt_Vuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vzh")
- },
- "Wuh_vzxt_Vub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vzb.128B")
- },
- "Wuw_vzxt_Vuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vzh.128B")
- },
- "Vb_condacc_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vaddbq")
- },
- "Vh_condacc_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaddhq")
- },
- "Vw_condacc_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaddwq")
- },
- "Vb_condacc_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vaddbq.128B")
- },
- "Vh_condacc_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddhq.128B")
- },
- "Vw_condacc_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddwq.128B")
- },
- "Vb_condacc_QnVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vaddbnq")
- },
- "Vh_condacc_QnVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vaddhnq")
- },
- "Vw_condacc_QnVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vaddwnq")
- },
- "Vb_condacc_QnVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vaddbnq.128B")
- },
- "Vh_condacc_QnVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vaddhnq.128B")
- },
- "Vw_condacc_QnVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vaddwnq.128B")
- },
- "Vb_condnac_QVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vsubbq")
- },
- "Vh_condnac_QVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsubhq")
- },
- "Vw_condnac_QVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vsubwq")
- },
- "Vb_condnac_QVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vsubbq.128B")
- },
- "Vh_condnac_QVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubhq.128B")
- },
- "Vw_condnac_QVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubwq.128B")
- },
- "Vb_condnac_QnVbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vsubbnq")
- },
- "Vh_condnac_QnVhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsubhnq")
- },
- "Vw_condnac_QnVwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vsubwnq")
- },
- "Vb_condnac_QnVbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vsubbnq.128B")
- },
- "Vh_condnac_QnVhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubhnq.128B")
- },
- "Vw_condnac_QnVwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubwnq.128B")
- },
- "Vh_vshuffe_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vshufeh")
- },
- "Vh_vshuffe_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vshufeh.128B")
- },
- "Vh_vshuffo_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vshufoh")
- },
- "Vh_vshuffo_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vshufoh.128B")
- },
- "Vb_vshuff_Vb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vshuffb")
- },
- "Vh_vshuff_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vshuffh")
- },
- "Vb_vshuff_Vb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vshuffb.128B")
- },
- "Vh_vshuff_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vshuffh.128B")
- },
- "Vb_vshuffe_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vshuffeb")
- },
- "Vb_vshuffe_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vshuffeb.128B")
- },
- "Vb_vshuffo_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vshuffob")
- },
- "Vb_vshuffo_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vshuffob.128B")
- },
- "Vb_vshuffoe_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vshuffoeb")
- },
- "Vh_vshuffoe_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vshuffoeh")
- },
- "Vb_vshuffoe_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vshuffoeb.128B")
- },
- "Vh_vshuffoe_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vshuffoeh.128B")
- },
- "W_vshuff_VVR64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x64, &::U8x64, &::U32]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vshufvvd")
- },
- "W_vshuff_VVR128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x128, &::U8x128, &::U32]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vshufvvd.128B")
- },
- "Vb_vsub_VbVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x64, &::I8x64]; &INPUTS },
- output: &::I8x64,
- definition: Named("llvm.hexagon.V6.vsubb")
- },
- "Vh_vsub_VhVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsubh")
- },
- "Vw_vsub_VwVw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vsubw")
- },
- "Vb_vsub_VbVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vsubb.128B")
- },
- "Vh_vsub_VhVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubh.128B")
- },
- "Vw_vsub_VwVw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubw.128B")
- },
- "Vh_vsub_VhVh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x32, &::I16x32]; &INPUTS },
- output: &::I16x32,
- definition: Named("llvm.hexagon.V6.vsubhsat")
- },
- "Vw_vsub_VwVw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x16, &::I32x16]; &INPUTS },
- output: &::I32x16,
- definition: Named("llvm.hexagon.V6.vsubwsat")
- },
- "Vh_vsub_VhVh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubhsat.128B")
- },
- "Vw_vsub_VwVw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubwsat.128B")
- },
- "Vub_vsub_VubVub_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x64,
- definition: Named("llvm.hexagon.V6.vsububsat")
- },
- "Vuh_vsub_VuhVuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vsubuhsat")
- },
- "Vub_vsub_VubVub_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vsububsat.128B")
- },
- "Vuh_vsub_VuhVuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vsubuhsat.128B")
- },
- "Wb_vsub_WbWb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::I8x128]; &INPUTS },
- output: &::I8x128,
- definition: Named("llvm.hexagon.V6.vsubb.dv")
- },
- "Wh_vsub_WhWh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubh.dv")
- },
- "Ww_vsub_WwWw64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubw.dv")
- },
- "Wb_vsub_WbWb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x256, &::I8x256]; &INPUTS },
- output: &::I8x256,
- definition: Named("llvm.hexagon.V6.vsubb.dv.128B")
- },
- "Wh_vsub_WhWh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I16x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vsubh.dv.128B")
- },
- "Ww_vsub_WwWw128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I32x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vsubw.dv.128B")
- },
- "Wh_vsub_WhWh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I16x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vsubhsat.dv")
- },
- "Ww_vsub_WwWw_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I32x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vsubwsat.dv")
- },
- "Wh_vsub_WhWh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I16x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vsubhsat.dv.128B")
- },
- "Ww_vsub_WwWw_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I32x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vsubwsat.dv.128B")
- },
- "Wub_vsub_WubWub_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vsububsat.dv")
- },
- "Wuh_vsub_WuhWuh_sat64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vsubuhsat.dv")
- },
- "Wub_vsub_WubWub_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U8x256]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vsububsat.dv.128B")
- },
- "Wuh_vsub_WuhWuh_sat128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x128, &::U16x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vsubuhsat.dv.128B")
- },
- "W_vswap_QVV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x2, &::U8x64, &::U8x64]; &INPUTS },
- output: &::U8x128,
- definition: Named("llvm.hexagon.V6.vswap")
- },
- "W_vswap_QVV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U32x4, &::U8x128, &::U8x128]; &INPUTS },
- output: &::U8x256,
- definition: Named("llvm.hexagon.V6.vswap.128B")
- },
- "Wh_vtmpy_WbRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vtmpyb")
- },
- "Wh_vtmpy_WbRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vtmpyb.128B")
- },
- "Wh_vtmpyacc_WhWbRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::I8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vtmpyb.acc")
- },
- "Wh_vtmpyacc_WhWbRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::I8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vtmpyb.acc.128B")
- },
- "Wh_vtmpy_WubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vtmpybus")
- },
- "Wh_vtmpy_WubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vtmpybus.128B")
- },
- "Wh_vtmpyacc_WhWubRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x64, &::U8x128, &::U32]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vtmpybus.acc")
- },
- "Wh_vtmpyacc_WhWubRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x128, &::U8x256, &::U32]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vtmpybus.acc.128B")
- },
- "Ww_vtmpy_WhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vtmpyhb")
- },
- "Ww_vtmpy_WhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vtmpyhb.128B")
- },
- "Wh_vunpack_Vb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vunpackb")
- },
- "Wuh_vunpack_Vub64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vunpackub")
- },
- "Ww_vunpack_Vh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vunpackh")
- },
- "Wuw_vunpack_Vuh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x32]; &INPUTS },
- output: &::U32x32,
- definition: Named("llvm.hexagon.V6.vunpackuh")
- },
- "Wh_vunpack_Vb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vunpackb.128B")
- },
- "Wuh_vunpack_Vub128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U8x128]; &INPUTS },
- output: &::U16x128,
- definition: Named("llvm.hexagon.V6.vunpackub.128B")
- },
- "Ww_vunpack_Vh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vunpackh.128B")
- },
- "Wuw_vunpack_Vuh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x64]; &INPUTS },
- output: &::U32x64,
- definition: Named("llvm.hexagon.V6.vunpackuh.128B")
- },
- "Wh_vunpackoor_WhVb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x64, &::I8x64]; &INPUTS },
- output: &::I16x64,
- definition: Named("llvm.hexagon.V6.vunpackob")
- },
- "Ww_vunpackoor_WwVh64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x32, &::I16x32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vunpackoh")
- },
- "Wh_vunpackoor_WhVb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x128, &::I8x128]; &INPUTS },
- output: &::I16x128,
- definition: Named("llvm.hexagon.V6.vunpackob.128B")
- },
- "Ww_vunpackoor_WwVh128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x64, &::I16x64]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vunpackoh.128B")
- },
- "Ww_vtmpyacc_WwWhRb64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x32, &::I16x64, &::U32]; &INPUTS },
- output: &::I32x32,
- definition: Named("llvm.hexagon.V6.vtmpyhb.acc")
- },
- "Ww_vtmpyacc_WwWhRb128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x64, &::I16x128, &::U32]; &INPUTS },
- output: &::I32x64,
- definition: Named("llvm.hexagon.V6.vtmpyhb.acc.128B")
- },
- "V_vxor_VV64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x32, &::U16x32]; &INPUTS },
- output: &::U16x32,
- definition: Named("llvm.hexagon.V6.vxor")
- },
- "V_vxor_VV128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x64, &::U16x64]; &INPUTS },
- output: &::U16x64,
- definition: Named("llvm.hexagon.V6.vxor.128B")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/lib.rs b/src/librustc_platform_intrinsics/lib.rs
deleted file mode 100644
index 9fbf168..0000000
--- a/src/librustc_platform_intrinsics/lib.rs
+++ /dev/null
@@ -1,124 +0,0 @@
-#![allow(nonstandard_style)]
-
-#![feature(nll)]
-
-pub struct Intrinsic {
- pub inputs: &'static [&'static Type],
- pub output: &'static Type,
-
- pub definition: IntrinsicDef,
-}
-
-#[derive(Clone, Hash, Eq, PartialEq)]
-pub enum Type {
- Void,
- Integer(/* signed */ bool, u8, /* llvm width */ u8),
- Float(u8),
- Pointer(&'static Type, Option<&'static Type>, /* const */ bool),
- Vector(&'static Type, Option<&'static Type>, u16),
- Aggregate(bool, &'static [&'static Type]),
-}
-
-pub enum IntrinsicDef {
- Named(&'static str),
-}
-
-static I8: Type = Type::Integer(true, 8, 8);
-static I16: Type = Type::Integer(true, 16, 16);
-static I32: Type = Type::Integer(true, 32, 32);
-static I64: Type = Type::Integer(true, 64, 64);
-static U8: Type = Type::Integer(false, 8, 8);
-static U16: Type = Type::Integer(false, 16, 16);
-static U32: Type = Type::Integer(false, 32, 32);
-static U64: Type = Type::Integer(false, 64, 64);
-static F32: Type = Type::Float(32);
-static F64: Type = Type::Float(64);
-
-static I32_8: Type = Type::Integer(true, 32, 8);
-
-static I8x8: Type = Type::Vector(&I8, None, 8);
-static U8x8: Type = Type::Vector(&U8, None, 8);
-static I8x16: Type = Type::Vector(&I8, None, 16);
-static U8x16: Type = Type::Vector(&U8, None, 16);
-static I8x32: Type = Type::Vector(&I8, None, 32);
-static U8x32: Type = Type::Vector(&U8, None, 32);
-static I8x64: Type = Type::Vector(&I8, None, 64);
-static U8x64: Type = Type::Vector(&U8, None, 64);
-static I8x128: Type = Type::Vector(&I8, None, 128);
-static U8x128: Type = Type::Vector(&U8, None, 128);
-static I8x256: Type = Type::Vector(&I8, None, 256);
-static U8x256: Type = Type::Vector(&U8, None, 256);
-
-static I16x4: Type = Type::Vector(&I16, None, 4);
-static U16x4: Type = Type::Vector(&U16, None, 4);
-static I16x8: Type = Type::Vector(&I16, None, 8);
-static U16x8: Type = Type::Vector(&U16, None, 8);
-static I16x16: Type = Type::Vector(&I16, None, 16);
-static U16x16: Type = Type::Vector(&U16, None, 16);
-static I16x32: Type = Type::Vector(&I16, None, 32);
-static U16x32: Type = Type::Vector(&U16, None, 32);
-static I16x64: Type = Type::Vector(&I16, None, 64);
-static U16x64: Type = Type::Vector(&U16, None, 64);
-static I16x128: Type = Type::Vector(&I16, None, 128);
-static U16x128: Type = Type::Vector(&U16, None, 128);
-
-static I32x2: Type = Type::Vector(&I32, None, 2);
-static U32x2: Type = Type::Vector(&U32, None, 2);
-static I32x4: Type = Type::Vector(&I32, None, 4);
-static U32x4: Type = Type::Vector(&U32, None, 4);
-static I32x8: Type = Type::Vector(&I32, None, 8);
-static U32x8: Type = Type::Vector(&U32, None, 8);
-static I32x16: Type = Type::Vector(&I32, None, 16);
-static U32x16: Type = Type::Vector(&U32, None, 16);
-static I32x32: Type = Type::Vector(&I32, None, 32);
-static U32x32: Type = Type::Vector(&U32, None, 32);
-static I32x64: Type = Type::Vector(&I32, None, 64);
-static U32x64: Type = Type::Vector(&U32, None, 64);
-
-static I64x1: Type = Type::Vector(&I64, None, 1);
-static U64x1: Type = Type::Vector(&U64, None, 1);
-static I64x2: Type = Type::Vector(&I64, None, 2);
-static U64x2: Type = Type::Vector(&U64, None, 2);
-static I64x4: Type = Type::Vector(&I64, None, 4);
-static U64x4: Type = Type::Vector(&U64, None, 4);
-
-static F32x2: Type = Type::Vector(&F32, None, 2);
-static F32x4: Type = Type::Vector(&F32, None, 4);
-static F32x8: Type = Type::Vector(&F32, None, 8);
-static F64x1: Type = Type::Vector(&F64, None, 1);
-static F64x2: Type = Type::Vector(&F64, None, 2);
-static F64x4: Type = Type::Vector(&F64, None, 4);
-
-static I32x4_F32: Type = Type::Vector(&I32, Some(&F32), 4);
-static I32x8_F32: Type = Type::Vector(&I32, Some(&F32), 8);
-static I64x2_F64: Type = Type::Vector(&I64, Some(&F64), 2);
-static I64x4_F64: Type = Type::Vector(&I64, Some(&F64), 4);
-
-static VOID: Type = Type::Void;
-
-mod x86;
-mod arm;
-mod aarch64;
-mod nvptx;
-mod hexagon;
-mod powerpc;
-
-impl Intrinsic {
- pub fn find(name: &str) -> Option<Intrinsic> {
- if name.starts_with("x86_") {
- x86::find(name)
- } else if name.starts_with("arm_") {
- arm::find(name)
- } else if name.starts_with("aarch64_") {
- aarch64::find(name)
- } else if name.starts_with("nvptx_") {
- nvptx::find(name)
- } else if name.starts_with("Q6_") {
- hexagon::find(name)
- } else if name.starts_with("powerpc_") {
- powerpc::find(name)
- } else {
- None
- }
- }
-}
diff --git a/src/librustc_platform_intrinsics/nvptx.rs b/src/librustc_platform_intrinsics/nvptx.rs
deleted file mode 100644
index 4127846..0000000
--- a/src/librustc_platform_intrinsics/nvptx.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("nvptx") { return None }
- Some(match &name["nvptx".len()..] {
- "_syncthreads" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.cuda.syncthreads")
- },
- "_block_dim_x" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ntid.x")
- },
- "_block_dim_y" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ntid.y")
- },
- "_block_dim_z" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ntid.z")
- },
- "_block_idx_x" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ctaid.x")
- },
- "_block_idx_y" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ctaid.y")
- },
- "_block_idx_z" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.ctaid.z")
- },
- "_grid_dim_x" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.nctaid.x")
- },
- "_grid_dim_y" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.nctaid.y")
- },
- "_grid_dim_z" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.nctaid.z")
- },
- "_thread_idx_x" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.tid.x")
- },
- "_thread_idx_y" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.tid.y")
- },
- "_thread_idx_z" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::I32,
- definition: Named("llvm.nvvm.read.ptx.sreg.tid.z")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/powerpc.rs b/src/librustc_platform_intrinsics/powerpc.rs
deleted file mode 100644
index d745090..0000000
--- a/src/librustc_platform_intrinsics/powerpc.rs
+++ /dev/null
@@ -1,439 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("powerpc") { return None }
- Some(match &name["powerpc".len()..] {
- "_vec_perm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I32x4, &::I32x4, &::I8x16]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vperm")
- },
- "_vec_mradds" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmhraddshs")
- },
- "_vec_cmpb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vcmpbfp")
- },
- "_vec_cmpeqb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vcmpequb")
- },
- "_vec_cmpeqh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vcmpequh")
- },
- "_vec_cmpeqw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vcmpequw")
- },
- "_vec_cmpgtub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vcmpgtub")
- },
- "_vec_cmpgtuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vcmpgtuh")
- },
- "_vec_cmpgtuw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vcmpgtuw")
- },
- "_vec_cmpgtsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vcmpgtsb")
- },
- "_vec_cmpgtsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vcmpgtsh")
- },
- "_vec_cmpgtsw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vcmpgtsw")
- },
- "_vec_maxsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vmaxsb")
- },
- "_vec_maxub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vmaxub")
- },
- "_vec_maxsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmaxsh")
- },
- "_vec_maxuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vmaxuh")
- },
- "_vec_maxsw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmaxsw")
- },
- "_vec_maxuw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmaxuw")
- },
- "_vec_minsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vminsb")
- },
- "_vec_minub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vminub")
- },
- "_vec_minsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vminsh")
- },
- "_vec_minuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vminuh")
- },
- "_vec_minsw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vminsw")
- },
- "_vec_minuw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vminuw")
- },
- "_vec_subsbs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vsubsbs")
- },
- "_vec_sububs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vsububs")
- },
- "_vec_subshs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vsubshs")
- },
- "_vec_subuhs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vsubuhs")
- },
- "_vec_subsws" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsubsws")
- },
- "_vec_subuws" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vsubuws")
- },
- "_vec_subc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vsubcuw")
- },
- "_vec_addsbs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vaddsbs")
- },
- "_vec_addubs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vaddubs")
- },
- "_vec_addshs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vaddshs")
- },
- "_vec_adduhs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vadduhs")
- },
- "_vec_addsws" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vaddsws")
- },
- "_vec_adduws" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vadduws")
- },
- "_vec_addc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vaddcuw")
- },
- "_vec_mulesb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmulesb")
- },
- "_vec_muleub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vmuleub")
- },
- "_vec_mulesh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmulesh")
- },
- "_vec_muleuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmuleuh")
- },
- "_vec_mulosb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmulosb")
- },
- "_vec_muloub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vmuloub")
- },
- "_vec_mulosh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmulosh")
- },
- "_vec_mulouh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmulouh")
- },
- "_vec_avgsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vavgsb")
- },
- "_vec_avgub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vavgub")
- },
- "_vec_avgsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vavgsh")
- },
- "_vec_avguh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vavguh")
- },
- "_vec_avgsw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vavgsw")
- },
- "_vec_avguw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vavguw")
- },
- "_vec_packssh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.ppc.altivec.vpkshss")
- },
- "_vec_packsuh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vpkuhus")
- },
- "_vec_packssw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vpkswss")
- },
- "_vec_packsuw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vpkuwus")
- },
- "_vec_packsush" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.ppc.altivec.vpkshus")
- },
- "_vec_packsusw" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.ppc.altivec.vpkswus")
- },
- "_vec_packpx" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vpkpx")
- },
- "_vec_unpacklsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vupklsb")
- },
- "_vec_unpacklsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vupklsh")
- },
- "_vec_unpackhsb" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vupkhsb")
- },
- "_vec_unpackhsh" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vupkhsh")
- },
- "_vec_madds" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.ppc.altivec.vmhaddshs")
- },
- "_vec_msumubm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmsumubm")
- },
- "_vec_msumuhm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x8, &::U16x8, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmsumuhm")
- },
- "_vec_msummbm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::U8x16, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmsummbm")
- },
- "_vec_msumshm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmsumshm")
- },
- "_vec_msumshs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I16x8, &::I16x8, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vmsumshs")
- },
- "_vec_msumuhs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U16x8, &::U16x8, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vmsumuhs")
- },
- "_vec_sum2s" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsum2sws")
- },
- "_vec_sum4sbs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsum4sbs")
- },
- "_vec_sum4ubs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.ppc.altivec.vsum4ubs")
- },
- "_vec_sum4shs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsum4shs")
- },
- "_vec_sums" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.ppc.altivec.vsumsws")
- },
- "_vec_madd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vmaddfp")
- },
- "_vec_nmsub" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vnmsubfp")
- },
- "_vec_expte" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vexptefp")
- },
- "_vec_floor" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrfim")
- },
- "_vec_ceil" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrfip")
- },
- "_vec_round" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrfin")
- },
- "_vec_trunc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrfiz")
- },
- "_vec_loge" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vlogefp")
- },
- "_vec_re" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrefp")
- },
- "_vec_rsqrte" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.ppc.altivec.vrsqrtefp")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_platform_intrinsics/x86.rs b/src/librustc_platform_intrinsics/x86.rs
deleted file mode 100644
index 3f1ba91..0000000
--- a/src/librustc_platform_intrinsics/x86.rs
+++ /dev/null
@@ -1,1369 +0,0 @@
-// DO NOT EDIT: autogenerated by etc/platform-intrinsics/generator.py
-// ignore-tidy-linelength
-
-#![allow(unused_imports)]
-
-use {Intrinsic, Type};
-use IntrinsicDef::Named;
-
-pub fn find(name: &str) -> Option<Intrinsic> {
- if !name.starts_with("x86") { return None }
- Some(match &name["x86".len()..] {
- "_mm256_abs_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.pabs.b")
- },
- "_mm256_abs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pabs.w")
- },
- "_mm256_abs_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.pabs.d")
- },
- "_mm256_adds_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.padds.b")
- },
- "_mm256_adds_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.paddus.b")
- },
- "_mm256_adds_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.padds.w")
- },
- "_mm256_adds_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.paddus.w")
- },
- "_mm256_avg_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.pavg.b")
- },
- "_mm256_avg_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.pavg.w")
- },
- "_mm256_hadd_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.phadd.w")
- },
- "_mm256_hadd_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.phadd.d")
- },
- "_mm256_hadds_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.phadd.sw")
- },
- "_mm256_hsub_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.phsub.w")
- },
- "_mm256_hsub_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.phsub.d")
- },
- "_mm256_hsubs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.phsub.sw")
- },
- "_mm256_madd_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.pmadd.wd")
- },
- "_mm256_maddubs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmadd.ub.sw")
- },
- "_mm_mask_i32gather_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I32x4, &::I32x4, &::I32_8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx2.gather.d.d")
- },
- "_mm_mask_i32gather_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x4, &::I32x4_F32, &::I32_8]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx2.gather.d.ps")
- },
- "_mm256_mask_i32gather_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I32x8, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I32x8, &::I32x8, &::I32_8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.gather.d.d.256")
- },
- "_mm256_mask_i32gather_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F32x8, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x8, &::I32x8_F32, &::I32_8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx2.gather.d.ps.256")
- },
- "_mm_mask_i32gather_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I64x2, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x2, &::I32_8]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.x86.avx2.gather.d.q")
- },
- "_mm_mask_i32gather_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F64x2, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x2_F64, &::I32_8]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.avx2.gather.d.pd")
- },
- "_mm256_mask_i32gather_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I64x4, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x4, &::I32_8]; &INPUTS },
- output: &::I64x4,
- definition: Named("llvm.x86.avx2.gather.d.q.256")
- },
- "_mm256_mask_i32gather_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F64x4, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I32x4, &::I64x4_F64, &::I32_8]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx2.gather.d.pd.256")
- },
- "_mm_mask_i64gather_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I64x2, &::I32x4, &::I32_8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx2.gather.q.d")
- },
- "_mm_mask_i64gather_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I64x2, &::I32x4_F32, &::I32_8]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx2.gather.q.ps")
- },
- "_mm256_mask_i64gather_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I32x4, { static PTR: Type = Type::Pointer(&::I32, Some(&::I8), true); &PTR }, &::I64x4, &::I32x4, &::I32_8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx2.gather.q.d")
- },
- "_mm256_mask_i64gather_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F32x4, { static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I64x4, &::I32x4_F32, &::I32_8]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx2.gather.q.ps")
- },
- "_mm_mask_i64gather_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I64x2, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I64x2, &::I64x2, &::I32_8]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.x86.avx2.gather.q.q")
- },
- "_mm_mask_i64gather_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F64x2, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x2, &::I64x2_F64, &::I32_8]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.avx2.gather.q.pd")
- },
- "_mm256_mask_i64gather_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I64x4, { static PTR: Type = Type::Pointer(&::I64, Some(&::I8), true); &PTR }, &::I64x4, &::I64x4, &::I32_8]; &INPUTS },
- output: &::I64x4,
- definition: Named("llvm.x86.avx2.gather.q.q.256")
- },
- "_mm256_mask_i64gather_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::F64x4, { static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x4, &::I64x4_F64, &::I32_8]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx2.gather.q.pd.256")
- },
- "_mm_maskload_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I32x4, Some(&::I8), true); &PTR }, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx2.maskload.d")
- },
- "_mm_maskload_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I64x2, Some(&::I8), true); &PTR }, &::I64x2]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.x86.avx2.maskload.q")
- },
- "_mm256_maskload_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I32x8, Some(&::I8), true); &PTR }, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.maskload.d.256")
- },
- "_mm256_maskload_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::I64x4, Some(&::I8), true); &PTR }, &::I64x4]; &INPUTS },
- output: &::I64x4,
- definition: Named("llvm.x86.avx2.maskload.q.256")
- },
- "_mm_maskstore_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I8), false); &PTR }, &::I32x4, &::I32x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx2.maskstore.d")
- },
- "_mm_maskstore_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I8), false); &PTR }, &::I64x2, &::I64x2]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx2.maskstore.q")
- },
- "_mm256_maskstore_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I32, Some(&::I8), false); &PTR }, &::I32x8, &::I32x8]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx2.maskstore.d.256")
- },
- "_mm256_maskstore_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::I64, Some(&::I8), false); &PTR }, &::I64x4, &::I64x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx2.maskstore.q.256")
- },
- "_mm256_max_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.pmaxs.b")
- },
- "_mm256_max_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.pmaxu.b")
- },
- "_mm256_max_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmaxs.w")
- },
- "_mm256_max_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.pmaxu.w")
- },
- "_mm256_max_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.pmaxs.d")
- },
- "_mm256_max_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
- output: &::U32x8,
- definition: Named("llvm.x86.avx2.pmaxu.d")
- },
- "_mm256_min_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.pmins.b")
- },
- "_mm256_min_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.pminu.b")
- },
- "_mm256_min_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmins.w")
- },
- "_mm256_min_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.pminu.w")
- },
- "_mm256_min_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.pmins.d")
- },
- "_mm256_min_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
- output: &::U32x8,
- definition: Named("llvm.x86.avx2.pminu.d")
- },
- "_mm256_movemask_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x32]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx2.pmovmskb")
- },
- "_mm256_mpsadbw_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x32, &::U8x32, &::I32_8]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.mpsadbw")
- },
- "_mm256_mul_epi64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I64x4,
- definition: Named("llvm.x86.avx2.pmulq.dq")
- },
- "_mm256_mul_epu64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x8, &::U32x8]; &INPUTS },
- output: &::U64x4,
- definition: Named("llvm.x86.avx2.pmulq.dq")
- },
- "_mm256_mulhi_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmulhw.w")
- },
- "_mm256_mulhi_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.pmulhw.w")
- },
- "_mm256_mulhrs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.pmul.hr.sw")
- },
- "_mm256_packs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.packsswb")
- },
- "_mm256_packus_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.packuswb")
- },
- "_mm256_packs_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.packssdw")
- },
- "_mm256_packus_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.packusdw")
- },
- "_mm256_permutevar8x32_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.permd")
- },
- "_mm256_permutevar8x32_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::I32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx2.permps")
- },
- "_mm256_sad_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U64x4,
- definition: Named("llvm.x86.avx2.psad.bw")
- },
- "_mm256_shuffle_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.pshuf.b")
- },
- "_mm256_sign_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.psign.b")
- },
- "_mm256_sign_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.psign.w")
- },
- "_mm256_sign_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x8, &::I32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx2.psign.d")
- },
- "_mm256_subs_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x32, &::I8x32]; &INPUTS },
- output: &::I8x32,
- definition: Named("llvm.x86.avx2.psubs.b")
- },
- "_mm256_subs_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x32, &::U8x32]; &INPUTS },
- output: &::U8x32,
- definition: Named("llvm.x86.avx2.psubus.b")
- },
- "_mm256_subs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x16, &::I16x16]; &INPUTS },
- output: &::I16x16,
- definition: Named("llvm.x86.avx2.psubs.w")
- },
- "_mm256_subs_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x16, &::U16x16]; &INPUTS },
- output: &::U16x16,
- definition: Named("llvm.x86.avx2.psubus.w")
- },
- "_mm256_addsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.addsub.ps.256")
- },
- "_mm256_addsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.addsub.pd.256")
- },
- "_mm256_blendv_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.blendv.ps.256")
- },
- "_mm256_blendv_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.blendv.pd.256")
- },
- "_mm256_broadcast_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.vbroadcastf128.ps.256")
- },
- "_mm256_broadcast_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::I8, None, true); &PTR }]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.vbroadcastf128.pd.256")
- },
- "_mm256_cmp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::I8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.cmp.ps.256")
- },
- "_mm256_cmp_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::I8]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.cmp.pd.256")
- },
- "_mm256_cvtepi32_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.cvtdq2.pd.256")
- },
- "_mm256_cvtepi32_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.cvtdq2.ps.256")
- },
- "_mm256_cvtpd_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx.cvt.pd2dq.256")
- },
- "_mm256_cvtpd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx.cvt.pd2.ps.256")
- },
- "_mm256_cvtps_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx.cvt.ps2dq.256")
- },
- "_mm256_cvtps_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.cvt.ps2.pd.256")
- },
- "_mm256_cvttpd_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.avx.cvtt.pd2dq.256")
- },
- "_mm256_cvttps_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::I32x8,
- definition: Named("llvm.x86.avx.cvtt.ps2dq.256")
- },
- "_mm256_dp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::I32_8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.dp.ps.256")
- },
- "_mm256_hadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.hadd.ps.256")
- },
- "_mm256_hadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.hadd.pd.256")
- },
- "_mm256_hsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.hsub.ps.256")
- },
- "_mm256_hsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.hsub.pd.256")
- },
- "_mm256_max_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.max.ps.256")
- },
- "_mm256_max_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.max.pd.256")
- },
- "_mm_maskload_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x4_F32]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx.maskload.ps")
- },
- "_mm_maskload_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x2_F64]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.avx.maskload.pd")
- },
- "_mm256_maskload_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), true); &PTR }, &::I32x8_F32]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.maskload.ps.256")
- },
- "_mm256_maskload_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), true); &PTR }, &::I64x4_F64]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.maskload.pd.256")
- },
- "_mm_maskstore_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::I32x4_F32, &::F32x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.maskstore.ps")
- },
- "_mm_maskstore_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), false); &PTR }, &::I64x2_F64, &::F64x2]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.maskstore.pd")
- },
- "_mm256_maskstore_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::I32x8_F32, &::F32x8]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.maskstore.ps.256")
- },
- "_mm256_maskstore_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::I8), false); &PTR }, &::I64x4_F64, &::F64x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.maskstore.pd.256")
- },
- "_mm256_min_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.min.ps.256")
- },
- "_mm256_min_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.min.pd.256")
- },
- "_mm256_movemask_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.movmsk.ps.256")
- },
- "_mm256_movemask_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.movmsk.pd.256")
- },
- "_mm_permutevar_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::I32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.avx.vpermilvar.ps")
- },
- "_mm_permutevar_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::I64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.avx.vpermilvar.pd")
- },
- "_mm256_permutevar_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::I32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.vpermilvar.ps.256")
- },
- "_mm256_permutevar_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::I64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.avx.vpermilvar.pd.256")
- },
- "_mm256_rcp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.rcp.ps.256")
- },
- "_mm256_rsqrt_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.avx.rsqrt.ps.256")
- },
- "_mm256_storeu_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32x8, Some(&::U8), false); &PTR }, &::F32x8]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.storeu.ps.256")
- },
- "_mm256_storeu_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64x4, Some(&::U8), false); &PTR }, &::F64x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.storeu.ps.256")
- },
- "_mm256_storeu_si256" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::U8x32, Some(&::U8), false); &PTR }, &::U8x32]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.storeu.dq.256")
- },
- "_mm256_sqrt_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.sqrt.v8f32")
- },
- "_mm256_sqrt_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.sqrt.v4f64")
- },
- "_mm_testc_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestc.ps")
- },
- "_mm256_testc_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestc.ps.256")
- },
- "_mm_testc_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestc.pd")
- },
- "_mm256_testc_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestc.pd.256")
- },
- "_mm256_testc_si256" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.ptestc.256")
- },
- "_mm_testnzc_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestnzc.ps")
- },
- "_mm256_testnzc_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestnzc.ps.256")
- },
- "_mm_testnzc_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestnzc.pd")
- },
- "_mm256_testnzc_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestnzc.pd.256")
- },
- "_mm256_testnzc_si256" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.ptestnzc.256")
- },
- "_mm_testz_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestz.ps")
- },
- "_mm256_testz_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x8, &::F32x8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestz.ps.256")
- },
- "_mm_testz_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestz.pd")
- },
- "_mm256_testz_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x4, &::F64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.vtestz.pd.256")
- },
- "_mm256_testz_si256" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x4, &::U64x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.avx.ptestz.256")
- },
- "_mm256_zeroall" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.vzeroall")
- },
- "_mm256_zeroupper" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.avx.vzeroupper")
- },
- "_bmi2_bzhi_32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.bmi.bzhi.32")
- },
- "_bmi2_bzhi_64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.bmi.bzhi.64")
- },
- "_bmi2_pdep_32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.bmi.pdep.32")
- },
- "_bmi2_pdep_64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.bmi.pdep.64")
- },
- "_bmi2_pext_32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.bmi.pext.32")
- },
- "_bmi2_pext_64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.bmi.pext.64")
- },
- "_bmi_bextr_32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.bmi.bextr.32")
- },
- "_bmi_bextr_64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.bmi.bextr.64")
- },
- "_mm_fmadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfmadd.ps")
- },
- "_mm_fmadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfmadd.pd")
- },
- "_mm256_fmadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfmadd.ps.256")
- },
- "_mm256_fmadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfmadd.pd.256")
- },
- "_mm_fmaddsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfmaddsub.ps")
- },
- "_mm_fmaddsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfmaddsub.pd")
- },
- "_mm256_fmaddsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfmaddsub.ps.256")
- },
- "_mm256_fmaddsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfmaddsub.pd.256")
- },
- "_mm_fmsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfmsub.ps")
- },
- "_mm_fmsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfmsub.pd")
- },
- "_mm256_fmsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfmsub.ps.256")
- },
- "_mm256_fmsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfmsub.pd.256")
- },
- "_mm_fmsubadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfmsubadd.ps")
- },
- "_mm_fmsubadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfmsubadd.pd")
- },
- "_mm256_fmsubadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfmsubadd.ps.256")
- },
- "_mm256_fmsubadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfmsubadd.pd.256")
- },
- "_mm_fnmadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfnmadd.ps")
- },
- "_mm_fnmadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfnmadd.pd")
- },
- "_mm256_fnmadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfnmadd.ps.256")
- },
- "_mm256_fnmadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfnmadd.pd.256")
- },
- "_mm_fnmsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.fma.vfnmsub.ps")
- },
- "_mm_fnmsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.fma.vfnmsub.pd")
- },
- "_mm256_fnmsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x8, &::F32x8, &::F32x8]; &INPUTS },
- output: &::F32x8,
- definition: Named("llvm.x86.fma.vfnmsub.ps.256")
- },
- "_mm256_fnmsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x4, &::F64x4, &::F64x4]; &INPUTS },
- output: &::F64x4,
- definition: Named("llvm.x86.fma.vfnmsub.pd.256")
- },
- "_rdrand16_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdrand.16")
- },
- "_rdrand32_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdrand.32")
- },
- "_rdrand64_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdrand.64")
- },
- "_rdseed16_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U16, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdseed.16")
- },
- "_rdseed32_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U32, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdseed.32")
- },
- "_rdseed64_step" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: { static AGG: Type = Type::Aggregate(false, { static PARTS: [&'static Type; 2] = [&::U64, &::I32]; &PARTS }); &AGG },
- definition: Named("llvm.x86.rdseed.64")
- },
- "_mm_adds_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse2.padds.b")
- },
- "_mm_adds_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.paddus.b")
- },
- "_mm_adds_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.padds.w")
- },
- "_mm_adds_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse2.paddus.w")
- },
- "_mm_avg_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.pavg.b")
- },
- "_mm_avg_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse2.pavg.w")
- },
- "_mm_lfence" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.lfence")
- },
- "_mm_madd_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.sse2.pmadd.wd")
- },
- "_mm_maskmoveu_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, { static PTR: Type = Type::Pointer(&::U8, None, false); &PTR }]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.maskmov.dqu")
- },
- "_mm_max_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.pmaxs.w")
- },
- "_mm_max_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.pmaxu.b")
- },
- "_mm_max_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse2.max.pd")
- },
- "_mm_mfence" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.fence")
- },
- "_mm_min_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.pmins.w")
- },
- "_mm_min_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.pminu.b")
- },
- "_mm_min_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse2.min.pd")
- },
- "_mm_movemask_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse2.movmsk.pd")
- },
- "_mm_movemask_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse2.pmovmskb.128")
- },
- "_mm_mul_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.x86.sse2.pmulu.dq")
- },
- "_mm_mulhi_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.pmulh.w")
- },
- "_mm_mulhi_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse2.pmulhu.w")
- },
- "_mm_packs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse2.packsswb.128")
- },
- "_mm_packs_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.packssdw.128")
- },
- "_mm_packus_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.packuswb.128")
- },
- "_mm_sad_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U64x2,
- definition: Named("llvm.x86.sse2.psad.bw")
- },
- "_mm_sfence" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 0] = []; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.sfence")
- },
- "_mm_sqrt_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.sqrt.v2f64")
- },
- "_mm_storeu_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F64, Some(&::U8), false); &PTR }, &::F64x2]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.storeu.pd")
- },
- "_mm_storeu_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::U8x16, Some(&::U8), false); &PTR }, &::U8x16]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse2.storeu.dq")
- },
- "_mm_subs_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse2.psubs.b")
- },
- "_mm_subs_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::U8x16]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse2.psubus.b")
- },
- "_mm_subs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.sse2.psubs.w")
- },
- "_mm_subs_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse2.psubus.w")
- },
- "_mm_addsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse3.addsub.ps")
- },
- "_mm_addsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse3.addsub.pd")
- },
- "_mm_hadd_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse3.hadd.ps")
- },
- "_mm_hadd_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse3.hadd.pd")
- },
- "_mm_hsub_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse3.hsub.ps")
- },
- "_mm_hsub_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F64x2, &::F64x2]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse3.hsub.pd")
- },
- "_mm_lddqu_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [{ static PTR: Type = Type::Pointer(&::U8x16, Some(&::I8), true); &PTR }]; &INPUTS },
- output: &::U8x16,
- definition: Named("llvm.x86.sse3.ldu.dq")
- },
- "_mm_dp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F32x4, &::F32x4, &::I32_8]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse41.dpps")
- },
- "_mm_dp_pd" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::F64x2, &::F64x2, &::I32_8]; &INPUTS },
- output: &::F64x2,
- definition: Named("llvm.x86.sse41.dppd")
- },
- "_mm_max_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse41.pmaxsb")
- },
- "_mm_max_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.pmaxuw")
- },
- "_mm_max_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.sse41.pmaxsd")
- },
- "_mm_max_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.x86.sse41.pmaxud")
- },
- "_mm_min_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse41.pminsb")
- },
- "_mm_min_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U16x8, &::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.pminuw")
- },
- "_mm_min_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.sse41.pminsd")
- },
- "_mm_min_epu32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32x4, &::U32x4]; &INPUTS },
- output: &::U32x4,
- definition: Named("llvm.x86.sse41.pminud")
- },
- "_mm_minpos_epu16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::U16x8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.phminposuw")
- },
- "_mm_mpsadbw_epu8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::U8x16, &::U8x16, &::I32_8]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.mpsadbw")
- },
- "_mm_mul_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I64x2,
- definition: Named("llvm.x86.sse41.pmuldq")
- },
- "_mm_packus_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::U16x8,
- definition: Named("llvm.x86.sse41.packusdw")
- },
- "_mm_testc_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse41.ptestc")
- },
- "_mm_testnzc_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse41.ptestnzc")
- },
- "_mm_testz_si128" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64x2, &::U64x2]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse41.ptestz")
- },
- "_mm_cmpestra" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestria128")
- },
- "_mm_cmpestrc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestric128")
- },
- "_mm_cmpestri" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestri128")
- },
- "_mm_cmpestrm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse42.pcmpestrm128")
- },
- "_mm_cmpestro" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestrio128")
- },
- "_mm_cmpestrs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestris128")
- },
- "_mm_cmpestrz" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 5] = [&::I8x16, &::I32, &::I8x16, &::I32, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpestriz128")
- },
- "_mm_cmpistra" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistria128")
- },
- "_mm_cmpistrc" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistric128")
- },
- "_mm_cmpistri" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistri128")
- },
- "_mm_cmpistrm" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.sse42.pcmpistrm128")
- },
- "_mm_cmpistro" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistrio128")
- },
- "_mm_cmpistrs" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistris128")
- },
- "_mm_cmpistrz" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 3] = [&::I8x16, &::I8x16, &::I32_8]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse42.pcmpistriz128")
- },
- "_mm_movemask_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::I32,
- definition: Named("llvm.x86.sse.movmsk.ps")
- },
- "_mm_max_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse.max.ps")
- },
- "_mm_min_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::F32x4, &::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse.min.ps")
- },
- "_mm_rsqrt_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse.rsqrt.ps")
- },
- "_mm_rcp_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.x86.sse.rcp.ps")
- },
- "_mm_sqrt_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::F32x4]; &INPUTS },
- output: &::F32x4,
- definition: Named("llvm.sqrt.v4f32")
- },
- "_mm_storeu_ps" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [{ static PTR: Type = Type::Pointer(&::F32, Some(&::I8), false); &PTR }, &::F32x4]; &INPUTS },
- output: &::VOID,
- definition: Named("llvm.x86.sse.storeu.ps")
- },
- "_mm_abs_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.ssse3.pabs.b.128")
- },
- "_mm_abs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.pabs.w.128")
- },
- "_mm_abs_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 1] = [&::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.ssse3.pabs.d.128")
- },
- "_mm_hadd_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.phadd.w.128")
- },
- "_mm_hadd_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.ssse3.phadd.d.128")
- },
- "_mm_hadds_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.phadd.sw.128")
- },
- "_mm_hsub_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.phsub.w.128")
- },
- "_mm_hsub_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.ssse3.phsub.d.128")
- },
- "_mm_hsubs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.phsub.sw.128")
- },
- "_mm_maddubs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U8x16, &::I8x16]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.pmadd.ub.sw.128")
- },
- "_mm_mulhrs_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.pmul.hr.sw.128")
- },
- "_mm_shuffle_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.ssse3.pshuf.b.128")
- },
- "_mm_sign_epi8" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I8x16, &::I8x16]; &INPUTS },
- output: &::I8x16,
- definition: Named("llvm.x86.ssse3.psign.b.128")
- },
- "_mm_sign_epi16" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I16x8, &::I16x8]; &INPUTS },
- output: &::I16x8,
- definition: Named("llvm.x86.ssse3.psign.w.128")
- },
- "_mm_sign_epi32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::I32x4, &::I32x4]; &INPUTS },
- output: &::I32x4,
- definition: Named("llvm.x86.ssse3.psign.d.128")
- },
- "_tbm_bextri_u32" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U32, &::U32]; &INPUTS },
- output: &::U32,
- definition: Named("llvm.x86.tbm.bextri.u32")
- },
- "_tbm_bextri_u64" => Intrinsic {
- inputs: { static INPUTS: [&'static Type; 2] = [&::U64, &::U64]; &INPUTS },
- output: &::U64,
- definition: Named("llvm.x86.tbm.bextri.u64")
- },
- _ => return None,
- })
-}
diff --git a/src/librustc_plugin/load.rs b/src/librustc_plugin/load.rs
index 9e7839e..39f5804 100644
--- a/src/librustc_plugin/load.rs
+++ b/src/librustc_plugin/load.rs
@@ -50,10 +50,7 @@
let plugins = match attr.meta_item_list() {
Some(xs) => xs,
- None => {
- call_malformed_plugin_attribute(sess, attr.span);
- continue;
- }
+ None => continue,
};
for plugin in plugins {
diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs
index 4890369..dcbb9ff 100644
--- a/src/librustc_privacy/lib.rs
+++ b/src/librustc_privacy/lib.rs
@@ -13,7 +13,7 @@
extern crate syntax_pos;
extern crate rustc_data_structures;
-use rustc::hir::{self, Node, PatKind};
+use rustc::hir::{self, Node, PatKind, AssociatedItemKind};
use rustc::hir::def::Def;
use rustc::hir::def_id::{CRATE_DEF_INDEX, LOCAL_CRATE, CrateNum, DefId};
use rustc::hir::intravisit::{self, Visitor, NestedVisitorMap};
@@ -22,12 +22,12 @@
use rustc::middle::privacy::{AccessLevel, AccessLevels};
use rustc::ty::{self, TyCtxt, Ty, TraitRef, TypeFoldable, GenericParamDefKind};
use rustc::ty::fold::TypeVisitor;
-use rustc::ty::query::Providers;
+use rustc::ty::query::{Providers, queries};
use rustc::ty::subst::Substs;
use rustc::util::nodemap::NodeSet;
use rustc_data_structures::fx::FxHashSet;
use rustc_data_structures::sync::Lrc;
-use syntax::ast::{self, CRATE_NODE_ID, Ident};
+use syntax::ast::{self, DUMMY_NODE_ID, Ident};
use syntax::attr;
use syntax::symbol::keywords;
use syntax_pos::Span;
@@ -548,7 +548,7 @@
let mut reach = self.reach(trait_item_ref.id.node_id, item_level);
reach.generics().predicates();
- if trait_item_ref.kind == hir::AssociatedItemKind::Type &&
+ if trait_item_ref.kind == AssociatedItemKind::Type &&
!trait_item_ref.defaultness.has_value() {
// No type to visit.
} else {
@@ -782,6 +782,11 @@
NestedVisitorMap::All(&self.tcx.hir())
}
+ fn visit_mod(&mut self, _m: &'tcx hir::Mod, _s: Span, _n: ast::NodeId) {
+ // Don't visit nested modules, since we run a separate visitor walk
+ // for each module in `privacy_access_levels`
+ }
+
fn visit_nested_body(&mut self, body: hir::BodyId) {
let orig_tables = mem::replace(&mut self.tables, self.tcx.body_tables(body));
let body = self.tcx.hir().body(body);
@@ -917,6 +922,11 @@
NestedVisitorMap::All(&self.tcx.hir())
}
+ fn visit_mod(&mut self, _m: &'tcx hir::Mod, _s: Span, _n: ast::NodeId) {
+ // Don't visit nested modules, since we run a separate visitor walk
+ // for each module in `privacy_access_levels`
+ }
+
fn visit_nested_body(&mut self, body: hir::BodyId) {
let orig_tables = mem::replace(&mut self.tables, self.tcx.body_tables(body));
let orig_in_body = mem::replace(&mut self.in_body, true);
@@ -1333,11 +1343,11 @@
if self.item_is_public(&impl_item_ref.id.node_id, &impl_item_ref.vis) {
let impl_item = self.tcx.hir().impl_item(impl_item_ref.id);
match impl_item_ref.kind {
- hir::AssociatedItemKind::Const => {
+ AssociatedItemKind::Const => {
found_pub_static = true;
intravisit::walk_impl_item(self, impl_item);
}
- hir::AssociatedItemKind::Method { has_self: false } => {
+ AssociatedItemKind::Method { has_self: false } => {
found_pub_static = true;
intravisit::walk_impl_item(self, impl_item);
}
@@ -1558,6 +1568,24 @@
in_assoc_ty: false,
}
}
+
+ fn check_trait_or_impl_item(&self, node_id: ast::NodeId, assoc_item_kind: AssociatedItemKind,
+ defaultness: hir::Defaultness, vis: ty::Visibility) {
+ let mut check = self.check(node_id, vis);
+
+ let (check_ty, is_assoc_ty) = match assoc_item_kind {
+ AssociatedItemKind::Const | AssociatedItemKind::Method { .. } => (true, false),
+ AssociatedItemKind::Type => (defaultness.has_value(), true),
+ // `ty()` for existential types is the underlying type,
+ // it's not a part of interface, so we skip it.
+ AssociatedItemKind::Existential => (false, true),
+ };
+ check.in_assoc_ty = is_assoc_ty;
+ check.generics().predicates();
+ if check_ty {
+ check.ty();
+ }
+ }
}
impl<'a, 'tcx> Visitor<'tcx> for PrivateItemsInPublicInterfacesVisitor<'a, 'tcx> {
@@ -1592,16 +1620,8 @@
self.check(item.id, item_visibility).generics().predicates();
for trait_item_ref in trait_item_refs {
- let mut check = self.check(trait_item_ref.id.node_id, item_visibility);
- check.in_assoc_ty = trait_item_ref.kind == hir::AssociatedItemKind::Type;
- check.generics().predicates();
-
- if trait_item_ref.kind == hir::AssociatedItemKind::Type &&
- !trait_item_ref.defaultness.has_value() {
- // No type to visit.
- } else {
- check.ty();
- }
+ self.check_trait_or_impl_item(trait_item_ref.id.node_id, trait_item_ref.kind,
+ trait_item_ref.defaultness, item_visibility);
}
}
hir::ItemKind::TraitAlias(..) => {
@@ -1647,9 +1667,8 @@
} else {
impl_vis
};
- let mut check = self.check(impl_item.id, impl_item_vis);
- check.in_assoc_ty = impl_item_ref.kind == hir::AssociatedItemKind::Type;
- check.generics().predicates().ty();
+ self.check_trait_or_impl_item(impl_item_ref.id.node_id, impl_item_ref.kind,
+ impl_item_ref.defaultness, impl_item_vis);
}
}
}
@@ -1659,6 +1678,7 @@
pub fn provide(providers: &mut Providers) {
*providers = Providers {
privacy_access_levels,
+ check_mod_privacy,
..*providers
};
}
@@ -1667,34 +1687,43 @@
tcx.privacy_access_levels(LOCAL_CRATE)
}
-fn privacy_access_levels<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
- krate: CrateNum)
- -> Lrc<AccessLevels> {
- assert_eq!(krate, LOCAL_CRATE);
-
- let krate = tcx.hir().krate();
+fn check_mod_privacy<'tcx>(tcx: TyCtxt<'_, 'tcx, 'tcx>, module_def_id: DefId) {
let empty_tables = ty::TypeckTables::empty(None);
// Check privacy of names not checked in previous compilation stages.
let mut visitor = NamePrivacyVisitor {
tcx,
tables: &empty_tables,
- current_item: CRATE_NODE_ID,
+ current_item: DUMMY_NODE_ID,
empty_tables: &empty_tables,
};
- intravisit::walk_crate(&mut visitor, krate);
+ let (module, span, node_id) = tcx.hir().get_module(module_def_id);
+ intravisit::walk_mod(&mut visitor, module, node_id);
// Check privacy of explicitly written types and traits as well as
// inferred types of expressions and patterns.
let mut visitor = TypePrivacyVisitor {
tcx,
tables: &empty_tables,
- current_item: DefId::local(CRATE_DEF_INDEX),
+ current_item: module_def_id,
in_body: false,
- span: krate.span,
+ span,
empty_tables: &empty_tables,
};
- intravisit::walk_crate(&mut visitor, krate);
+ intravisit::walk_mod(&mut visitor, module, node_id);
+}
+
+fn privacy_access_levels<'tcx>(
+ tcx: TyCtxt<'_, 'tcx, 'tcx>,
+ krate: CrateNum,
+) -> Lrc<AccessLevels> {
+ assert_eq!(krate, LOCAL_CRATE);
+
+ let krate = tcx.hir().krate();
+
+ for &module in krate.modules.keys() {
+ queries::check_mod_privacy::ensure(tcx, tcx.hir().local_def_id(module));
+ }
// Build up a set of all exported items in the AST. This is a set of all
// items which are reachable from external crates based on visibility.
diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs
index fea0138..35616cc 100644
--- a/src/librustc_resolve/build_reduced_graph.rs
+++ b/src/librustc_resolve/build_reduced_graph.rs
@@ -680,6 +680,9 @@
}
module.populated.set(true);
}
+ Def::TraitAlias(..) => {
+ self.define(parent, ident, TypeNS, (def, vis, DUMMY_SP, expansion));
+ }
Def::Struct(..) | Def::Union(..) => {
self.define(parent, ident, TypeNS, (def, vis, DUMMY_SP, expansion));
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 896cb3d..1cd4404 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -1546,9 +1546,7 @@
extern_module_map: FxHashMap<(DefId, bool /* MacrosOnly? */), Module<'a>>,
binding_parent_modules: FxHashMap<PtrKey<'a, NameBinding<'a>>, Module<'a>>,
- pub make_glob_map: bool,
- /// Maps imports to the names of items actually imported (this actually maps
- /// all imports, but only glob imports are actually interesting).
+ /// Maps glob imports to the names of items actually imported.
pub glob_map: GlobMap,
used_imports: FxHashSet<(NodeId, Namespace)>,
@@ -1795,7 +1793,6 @@
cstore: &'a CStore,
krate: &Crate,
crate_name: &str,
- make_glob_map: MakeGlobMap,
crate_loader: &'a mut CrateLoader<'a>,
arenas: &'a ResolverArenas<'a>)
-> Resolver<'a> {
@@ -1879,7 +1876,6 @@
extern_module_map: FxHashMap::default(),
binding_parent_modules: FxHashMap::default(),
- make_glob_map: make_glob_map == MakeGlobMap::Yes,
glob_map: Default::default(),
used_imports: FxHashSet::default(),
@@ -1989,14 +1985,15 @@
used.set(true);
directive.used.set(true);
self.used_imports.insert((directive.id, ns));
- self.add_to_glob_map(directive.id, ident);
+ self.add_to_glob_map(&directive, ident);
self.record_use(ident, ns, binding, false);
}
}
- fn add_to_glob_map(&mut self, id: NodeId, ident: Ident) {
- if self.make_glob_map {
- self.glob_map.entry(id).or_default().insert(ident.name);
+ #[inline]
+ fn add_to_glob_map(&mut self, directive: &ImportDirective<'_>, ident: Ident) {
+ if directive.is_glob() {
+ self.glob_map.entry(directive.id).or_default().insert(ident.name);
}
}
@@ -3321,7 +3318,12 @@
if let Some(def) = def {
match (def, source) {
(Def::Macro(..), _) => {
- err.span_label(span, format!("did you mean `{}!(...)`?", path_str));
+ err.span_suggestion_with_applicability(
+ span,
+ "use `!` to invoke the macro",
+ format!("{}!", path_str),
+ Applicability::MaybeIncorrect,
+ );
return (err, candidates);
}
(Def::TyAlias(..), PathSource::Trait(_)) => {
@@ -3333,13 +3335,22 @@
}
(Def::Mod(..), PathSource::Expr(Some(parent))) => match parent.node {
ExprKind::Field(_, ident) => {
- err.span_label(parent.span, format!("did you mean `{}::{}`?",
- path_str, ident));
+ err.span_suggestion_with_applicability(
+ parent.span,
+ "use the path separator to refer to an item",
+ format!("{}::{}", path_str, ident),
+ Applicability::MaybeIncorrect,
+ );
return (err, candidates);
}
ExprKind::MethodCall(ref segment, ..) => {
- err.span_label(parent.span, format!("did you mean `{}::{}(...)`?",
- path_str, segment.ident));
+ let span = parent.span.with_hi(segment.ident.span.hi());
+ err.span_suggestion_with_applicability(
+ span,
+ "use the path separator to refer to an item",
+ format!("{}::{}", path_str, segment.ident),
+ Applicability::MaybeIncorrect,
+ );
return (err, candidates);
}
_ => {}
@@ -3390,6 +3401,29 @@
Ok(ref snippet) if snippet == "{" => true,
_ => false,
};
+ // In case this could be a struct literal that needs to be surrounded
+ // by parenthesis, find the appropriate span.
+ let mut i = 0;
+ let mut closing_brace = None;
+ loop {
+ sp = sm.next_point(sp);
+ match sm.span_to_snippet(sp) {
+ Ok(ref snippet) => {
+ if snippet == "}" {
+ let sp = span.to(sp);
+ if let Ok(snippet) = sm.span_to_snippet(sp) {
+ closing_brace = Some((sp, snippet));
+ }
+ break;
+ }
+ }
+ _ => break,
+ }
+ i += 1;
+ if i > 100 { // The bigger the span the more likely we're
+ break; // incorrect. Bound it to 100 chars long.
+ }
+ }
match source {
PathSource::Expr(Some(parent)) => {
match parent.node {
@@ -3416,11 +3450,20 @@
}
},
PathSource::Expr(None) if followed_by_brace == true => {
- err.span_label(
- span,
- format!("did you mean `({} {{ /* fields */ }})`?",
- path_str),
- );
+ if let Some((sp, snippet)) = closing_brace {
+ err.span_suggestion_with_applicability(
+ sp,
+ "surround the struct literal with parenthesis",
+ format!("({})", snippet),
+ Applicability::MaybeIncorrect,
+ );
+ } else {
+ err.span_label(
+ span,
+ format!("did you mean `({} {{ /* fields */ }})`?",
+ path_str),
+ );
+ }
return (err, candidates);
},
_ => {
@@ -4598,7 +4641,7 @@
let import_id = match binding.kind {
NameBindingKind::Import { directive, .. } => {
self.maybe_unused_trait_imports.insert(directive.id);
- self.add_to_glob_map(directive.id, trait_name);
+ self.add_to_glob_map(&directive, trait_name);
Some(directive.id)
}
_ => None,
@@ -5310,12 +5353,6 @@
PathResolution::new(Def::Err)
}
-#[derive(PartialEq,Copy, Clone)]
-pub enum MakeGlobMap {
- Yes,
- No,
-}
-
#[derive(Copy, Clone, Debug)]
enum CrateLint {
/// Do not issue the lint
diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs
index 0c9e443..995df38 100644
--- a/src/librustc_save_analysis/dump_visitor.rs
+++ b/src/librustc_save_analysis/dump_visitor.rs
@@ -1238,13 +1238,9 @@
};
// Make a comma-separated list of names of imported modules.
- let glob_map = &self.save_ctxt.analysis.glob_map;
- let glob_map = glob_map.as_ref().unwrap();
- let names = if glob_map.contains_key(&id) {
- glob_map.get(&id).unwrap().iter().map(|n| n.to_string()).collect()
- } else {
- Vec::new()
- };
+ let def_id = self.tcx.hir().local_def_id(id);
+ let names = self.tcx.names_imported_by_glob_use(def_id);
+ let names: Vec<_> = names.iter().map(|n| n.to_string()).collect();
// Otherwise it's a span with wrong macro expansion info, which
// we don't want to track anyway, since it's probably macro-internal `use`
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs
index 132bd4f..73eb5de 100644
--- a/src/librustc_save_analysis/lib.rs
+++ b/src/librustc_save_analysis/lib.rs
@@ -71,7 +71,6 @@
tcx: TyCtxt<'l, 'tcx, 'tcx>,
tables: &'l ty::TypeckTables<'tcx>,
access_levels: &'l AccessLevels,
- analysis: &'l ty::CrateAnalysis,
span_utils: SpanUtils<'tcx>,
config: Config,
impl_counter: Cell<u32>,
@@ -1120,15 +1119,12 @@
pub fn process_crate<'l, 'tcx, H: SaveHandler>(
tcx: TyCtxt<'l, 'tcx, 'tcx>,
krate: &ast::Crate,
- analysis: &'l ty::CrateAnalysis,
cratename: &str,
input: &'l Input,
config: Option<Config>,
mut handler: H,
) {
tcx.dep_graph.with_ignore(|| {
- assert!(analysis.glob_map.is_some());
-
info!("Dumping crate {}", cratename);
// Privacy checking requires and is done after type checking; use a
@@ -1141,7 +1137,6 @@
let save_ctxt = SaveContext {
tcx,
tables: &ty::TypeckTables::empty(None),
- analysis,
access_levels: &access_levels,
span_utils: SpanUtils::new(&tcx.sess),
config: find_config(config),
diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs
index f42b0a1..3a21ca1 100644
--- a/src/librustc_target/spec/mod.rs
+++ b/src/librustc_target/spec/mod.rs
@@ -217,6 +217,46 @@
}
}
+#[derive(Clone, Copy, Debug, PartialEq, Hash, RustcEncodable, RustcDecodable)]
+pub enum MergeFunctions {
+ Disabled,
+ Trampolines,
+ Aliases
+}
+
+impl MergeFunctions {
+ pub fn desc(&self) -> &str {
+ match *self {
+ MergeFunctions::Disabled => "disabled",
+ MergeFunctions::Trampolines => "trampolines",
+ MergeFunctions::Aliases => "aliases",
+ }
+ }
+}
+
+impl FromStr for MergeFunctions {
+ type Err = ();
+
+ fn from_str(s: &str) -> Result<MergeFunctions, ()> {
+ match s {
+ "disabled" => Ok(MergeFunctions::Disabled),
+ "trampolines" => Ok(MergeFunctions::Trampolines),
+ "aliases" => Ok(MergeFunctions::Aliases),
+ _ => Err(()),
+ }
+ }
+}
+
+impl ToJson for MergeFunctions {
+ fn to_json(&self) -> Json {
+ match *self {
+ MergeFunctions::Disabled => "disabled".to_json(),
+ MergeFunctions::Trampolines => "trampolines".to_json(),
+ MergeFunctions::Aliases => "aliases".to_json(),
+ }
+ }
+}
+
pub type LinkArgs = BTreeMap<LinkerFlavor, Vec<String>>;
pub type TargetResult = Result<Target, String>;
@@ -690,7 +730,15 @@
/// If set, have the linker export exactly these symbols, instead of using
/// the usual logic to figure this out from the crate itself.
- pub override_export_symbols: Option<Vec<String>>
+ pub override_export_symbols: Option<Vec<String>>,
+
+ /// Determines how or whether the MergeFunctions LLVM pass should run for
+ /// this target. Either "disabled", "trampolines", or "aliases".
+ /// The MergeFunctions pass is generally useful, but some targets may need
+ /// to opt out. The default is "aliases".
+ ///
+ /// Workaround for: https://github.com/rust-lang/rust/issues/57356
+ pub merge_functions: MergeFunctions
}
impl Default for TargetOptions {
@@ -773,6 +821,7 @@
requires_uwtable: false,
simd_types_indirect: true,
override_export_symbols: None,
+ merge_functions: MergeFunctions::Aliases,
}
}
}
@@ -875,6 +924,19 @@
.map(|o| o.as_u64()
.map(|s| base.options.$key_name = Some(s)));
} );
+ ($key_name:ident, MergeFunctions) => ( {
+ let name = (stringify!($key_name)).replace("_", "-");
+ obj.find(&name[..]).and_then(|o| o.as_string().and_then(|s| {
+ match s.parse::<MergeFunctions>() {
+ Ok(mergefunc) => base.options.$key_name = mergefunc,
+ _ => return Some(Err(format!("'{}' is not a valid value for \
+ merge-functions. Use 'disabled', \
+ 'trampolines', or 'aliases'.",
+ s))),
+ }
+ Some(Ok(()))
+ })).unwrap_or(Ok(()))
+ } );
($key_name:ident, PanicStrategy) => ( {
let name = (stringify!($key_name)).replace("_", "-");
obj.find(&name[..]).and_then(|o| o.as_string().and_then(|s| {
@@ -1064,6 +1126,7 @@
key!(requires_uwtable, bool);
key!(simd_types_indirect, bool);
key!(override_export_symbols, opt_list);
+ key!(merge_functions, MergeFunctions)?;
if let Some(array) = obj.find("abi-blacklist").and_then(Json::as_array) {
for name in array.iter().filter_map(|abi| abi.as_string()) {
@@ -1275,6 +1338,7 @@
target_option_val!(requires_uwtable);
target_option_val!(simd_types_indirect);
target_option_val!(override_export_symbols);
+ target_option_val!(merge_functions);
if default.abi_blacklist != self.options.abi_blacklist {
d.insert("abi-blacklist".to_string(), self.options.abi_blacklist.iter()
diff --git a/src/librustc_traits/lowering/mod.rs b/src/librustc_traits/lowering/mod.rs
index 5502a1d..9bdef30 100644
--- a/src/librustc_traits/lowering/mod.rs
+++ b/src/librustc_traits/lowering/mod.rs
@@ -158,7 +158,8 @@
def_id: DefId,
) -> Clauses<'tcx> {
match tcx.def_key(def_id).disambiguated_data.data {
- DefPathData::Trait(_) => program_clauses_for_trait(tcx, def_id),
+ DefPathData::Trait(_) |
+ DefPathData::TraitAlias(_) => program_clauses_for_trait(tcx, def_id),
DefPathData::Impl => program_clauses_for_impl(tcx, def_id),
DefPathData::AssocTypeInImpl(..) => program_clauses_for_associated_type_value(tcx, def_id),
DefPathData::AssocTypeInTrait(..) => program_clauses_for_associated_type_def(tcx, def_id),
diff --git a/src/librustc_typeck/Cargo.toml b/src/librustc_typeck/Cargo.toml
index 87f11b0..68b28a6 100644
--- a/src/librustc_typeck/Cargo.toml
+++ b/src/librustc_typeck/Cargo.toml
@@ -15,7 +15,6 @@
rustc = { path = "../librustc" }
rustc_data_structures = { path = "../librustc_data_structures" }
rustc_errors = { path = "../librustc_errors" }
-rustc_platform_intrinsics = { path = "../librustc_platform_intrinsics" }
rustc_target = { path = "../librustc_target" }
smallvec = { version = "0.6.7", features = ["union", "may_dangle"] }
syntax = { path = "../libsyntax" }
diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs
index 8e5eaa1..e89506a 100644
--- a/src/librustc_typeck/astconv.rs
+++ b/src/librustc_typeck/astconv.rs
@@ -2,7 +2,7 @@
//! The main routine here is `ast_ty_to_ty()`; each use is parameterized by an
//! instance of `AstConv`.
-use errors::{Applicability, FatalError, DiagnosticId};
+use errors::{Applicability, DiagnosticId};
use hir::{self, GenericArg, GenericArgs};
use hir::def::Def;
use hir::def_id::DefId;
@@ -10,6 +10,7 @@
use lint;
use middle::resolve_lifetime as rl;
use namespace::Namespace;
+use rustc::lint::builtin::AMBIGUOUS_ASSOCIATED_ITEMS;
use rustc::traits;
use rustc::ty::{self, Ty, TyCtxt, ToPredicate, TypeFoldable};
use rustc::ty::{GenericParamDef, GenericParamDefKind};
@@ -689,27 +690,13 @@
{
self.prohibit_generics(trait_ref.path.segments.split_last().unwrap().1);
- let trait_def_id = self.trait_def_id(trait_ref);
self.ast_path_to_mono_trait_ref(trait_ref.path.span,
- trait_def_id,
+ trait_ref.trait_def_id(),
self_ty,
trait_ref.path.segments.last().unwrap())
}
- /// Get the `DefId` of the given trait ref. It _must_ actually be a trait.
- fn trait_def_id(&self, trait_ref: &hir::TraitRef) -> DefId {
- let path = &trait_ref.path;
- match path.def {
- Def::Trait(trait_def_id) => trait_def_id,
- Def::TraitAlias(alias_def_id) => alias_def_id,
- Def::Err => {
- FatalError.raise();
- }
- _ => unreachable!(),
- }
- }
-
- /// The given trait ref must actually be a trait.
+ /// The given trait-ref must actually be a trait.
pub(super) fn instantiate_poly_trait_ref_inner(&self,
trait_ref: &hir::TraitRef,
self_ty: Ty<'tcx>,
@@ -717,7 +704,7 @@
speculative: bool)
-> (ty::PolyTraitRef<'tcx>, Option<Vec<Span>>)
{
- let trait_def_id = self.trait_def_id(trait_ref);
+ let trait_def_id = trait_ref.trait_def_id();
debug!("instantiate_poly_trait_ref({:?}, def_id={:?})", trait_ref, trait_def_id);
@@ -1278,29 +1265,50 @@
}
// Create a type from a path to an associated type.
- // For a path `A::B::C::D`, `ty` and `ty_path_def` are the type and def for `A::B::C`
+ // For a path `A::B::C::D`, `qself_ty` and `qself_def` are the type and def for `A::B::C`
// and item_segment is the path segment for `D`. We return a type and a def for
// the whole path.
- // Will fail except for `T::A` and `Self::A`; i.e., if `ty`/`ty_path_def` are not a type
+ // Will fail except for `T::A` and `Self::A`; i.e., if `qself_ty`/`qself_def` are not a type
// parameter or `Self`.
- pub fn associated_path_def_to_ty(&self,
- ref_id: ast::NodeId,
- span: Span,
- ty: Ty<'tcx>,
- ty_path_def: Def,
- item_segment: &hir::PathSegment)
- -> (Ty<'tcx>, Def)
- {
+ pub fn associated_path_to_ty(
+ &self,
+ ref_id: ast::NodeId,
+ span: Span,
+ qself_ty: Ty<'tcx>,
+ qself_def: Def,
+ assoc_segment: &hir::PathSegment,
+ permit_variants: bool,
+ ) -> (Ty<'tcx>, Def) {
let tcx = self.tcx();
- let assoc_name = item_segment.ident;
+ let assoc_ident = assoc_segment.ident;
- debug!("associated_path_def_to_ty: {:?}::{}", ty, assoc_name);
+ debug!("associated_path_to_ty: {:?}::{}", qself_ty, assoc_ident);
- self.prohibit_generics(slice::from_ref(item_segment));
+ self.prohibit_generics(slice::from_ref(assoc_segment));
+
+ // Check if we have an enum variant.
+ let mut variant_resolution = None;
+ if let ty::Adt(adt_def, _) = qself_ty.sty {
+ if adt_def.is_enum() {
+ let variant_def = adt_def.variants.iter().find(|vd| {
+ tcx.hygienic_eq(assoc_ident, vd.ident, adt_def.did)
+ });
+ if let Some(variant_def) = variant_def {
+ let def = Def::Variant(variant_def.did);
+ if permit_variants {
+ check_type_alias_enum_variants_enabled(tcx, span);
+ tcx.check_stability(variant_def.did, Some(ref_id), span);
+ return (qself_ty, def);
+ } else {
+ variant_resolution = Some(def);
+ }
+ }
+ }
+ }
// Find the type of the associated item, and the trait where the associated
// item is declared.
- let bound = match (&ty.sty, ty_path_def) {
+ let bound = match (&qself_ty.sty, qself_def) {
(_, Def::SelfTy(Some(_), Some(impl_def_id))) => {
// `Self` in an impl of a trait -- we have a concrete self type and a
// trait reference.
@@ -1313,77 +1321,61 @@
};
let candidates = traits::supertraits(tcx, ty::Binder::bind(trait_ref))
- .filter(|r| self.trait_defines_associated_type_named(r.def_id(), assoc_name));
+ .filter(|r| self.trait_defines_associated_type_named(r.def_id(), assoc_ident));
- match self.one_bound_for_assoc_type(candidates, "Self", assoc_name, span) {
+ match self.one_bound_for_assoc_type(candidates, "Self", assoc_ident, span) {
Ok(bound) => bound,
Err(ErrorReported) => return (tcx.types.err, Def::Err),
}
}
(&ty::Param(_), Def::SelfTy(Some(param_did), None)) |
(&ty::Param(_), Def::TyParam(param_did)) => {
- match self.find_bound_for_assoc_item(param_did, assoc_name, span) {
+ match self.find_bound_for_assoc_item(param_did, assoc_ident, span) {
Ok(bound) => bound,
Err(ErrorReported) => return (tcx.types.err, Def::Err),
}
}
- (&ty::Adt(adt_def, _substs), Def::Enum(_did)) => {
- let ty_str = ty.to_string();
- // Incorrect enum variant.
- let mut err = tcx.sess.struct_span_err(
- span,
- &format!("no variant `{}` on enum `{}`", &assoc_name.as_str(), ty_str),
- );
- // Check if it was a typo.
- let input = adt_def.variants.iter().map(|variant| &variant.ident.name);
- if let Some(suggested_name) = find_best_match_for_name(
- input,
- &assoc_name.as_str(),
- None,
- ) {
- err.span_suggestion_with_applicability(
- span,
- "did you mean",
- format!("{}::{}", ty_str, suggested_name.to_string()),
- Applicability::MaybeIncorrect,
- );
- } else {
- err.span_label(span, "unknown variant");
- }
- err.emit();
- return (tcx.types.err, Def::Err);
- }
_ => {
- // Check if we have an enum variant.
- match ty.sty {
- ty::Adt(adt_def, _) if adt_def.is_enum() => {
- let variant_def = adt_def.variants.iter().find(|vd| {
- tcx.hygienic_eq(assoc_name, vd.ident, adt_def.did)
- });
- if let Some(variant_def) = variant_def {
- check_type_alias_enum_variants_enabled(tcx, span);
-
- let def = Def::Variant(variant_def.did);
- tcx.check_stability(def.def_id(), Some(ref_id), span);
- return (ty, def);
- }
- },
- _ => (),
- }
-
- // Don't print `TyErr` to the user.
- if !ty.references_error() {
+ if variant_resolution.is_some() {
+ // Variant in type position
+ let msg = format!("expected type, found variant `{}`", assoc_ident);
+ tcx.sess.span_err(span, &msg);
+ } else if qself_ty.is_enum() {
+ // Report as incorrect enum variant rather than ambiguous type.
+ let mut err = tcx.sess.struct_span_err(
+ span,
+ &format!("no variant `{}` on enum `{}`", &assoc_ident.as_str(), qself_ty),
+ );
+ // Check if it was a typo.
+ let adt_def = qself_ty.ty_adt_def().expect("enum is not an ADT");
+ if let Some(suggested_name) = find_best_match_for_name(
+ adt_def.variants.iter().map(|variant| &variant.ident.name),
+ &assoc_ident.as_str(),
+ None,
+ ) {
+ err.span_suggestion_with_applicability(
+ span,
+ "did you mean",
+ format!("{}::{}", qself_ty, suggested_name),
+ Applicability::MaybeIncorrect,
+ );
+ } else {
+ err.span_label(span, "unknown variant");
+ }
+ err.emit();
+ } else if !qself_ty.references_error() {
+ // Don't print `TyErr` to the user.
self.report_ambiguous_associated_type(span,
- &ty.to_string(),
+ &qself_ty.to_string(),
"Trait",
- &assoc_name.as_str());
+ &assoc_ident.as_str());
}
return (tcx.types.err, Def::Err);
}
};
let trait_did = bound.def_id();
- let (assoc_ident, def_scope) = tcx.adjust_ident(assoc_name, trait_did, ref_id);
+ let (assoc_ident, def_scope) = tcx.adjust_ident(assoc_ident, trait_did, ref_id);
let item = tcx.associated_items(trait_did).find(|i| {
Namespace::from(i.kind) == Namespace::Type &&
i.ident.modern() == assoc_ident
@@ -1394,11 +1386,35 @@
let def = Def::AssociatedTy(item.def_id);
if !item.vis.is_accessible_from(def_scope, tcx) {
- let msg = format!("{} `{}` is private", def.kind_name(), assoc_name);
+ let msg = format!("{} `{}` is private", def.kind_name(), assoc_ident);
tcx.sess.span_err(span, &msg);
}
tcx.check_stability(item.def_id, Some(ref_id), span);
+ if let Some(variant_def) = variant_resolution {
+ let mut err = tcx.struct_span_lint_node(
+ AMBIGUOUS_ASSOCIATED_ITEMS,
+ ref_id,
+ span,
+ "ambiguous associated item",
+ );
+
+ let mut could_refer_to = |def: Def, also| {
+ let note_msg = format!("`{}` could{} refer to {} defined here",
+ assoc_ident, also, def.kind_name());
+ err.span_note(tcx.def_span(def.def_id()), ¬e_msg);
+ };
+ could_refer_to(variant_def, "");
+ could_refer_to(def, " also");
+
+ err.span_suggestion_with_applicability(
+ span,
+ "use fully-qualified syntax",
+ format!("<{} as {}>::{}", qself_ty, "Trait", assoc_ident),
+ Applicability::HasPlaceholders,
+ ).emit();
+ }
+
(ty, def)
}
@@ -1773,7 +1789,7 @@
} else {
Def::Err
};
- self.associated_path_def_to_ty(ast_ty.id, ast_ty.span, ty, def, segment).0
+ self.associated_path_to_ty(ast_ty.id, ast_ty.span, ty, def, segment, false).0
}
hir::TyKind::Array(ref ty, ref length) => {
let length_def_id = tcx.hir().local_def_id(length.id);
diff --git a/src/librustc_typeck/check/intrinsic.rs b/src/librustc_typeck/check/intrinsic.rs
index 9f323b9..143715d 100644
--- a/src/librustc_typeck/check/intrinsic.rs
+++ b/src/librustc_typeck/check/intrinsic.rs
@@ -1,17 +1,13 @@
//! Type-checking for the rust-intrinsic and platform-intrinsic
//! intrinsics that the compiler exposes.
-use intrinsics;
use rustc::traits::{ObligationCause, ObligationCauseCode};
use rustc::ty::{self, TyCtxt, Ty};
use rustc::ty::subst::Subst;
-use rustc::util::nodemap::FxHashMap;
use require_same_types;
use rustc_target::spec::abi::Abi;
-use syntax::ast;
use syntax::symbol::Symbol;
-use syntax_pos::Span;
use rustc::hir;
@@ -402,8 +398,6 @@
tcx.mk_ty_param(n, name)
};
- let def_id = tcx.hir().local_def_id(it.id);
- let i_n_tps = tcx.generics_of(def_id).own_counts().types;
let name = it.ident.as_str();
let (n_tps, inputs, output) = match &*name {
@@ -461,159 +455,12 @@
}
}
_ => {
- match intrinsics::Intrinsic::find(&name) {
- Some(intr) => {
- // this function is a platform specific intrinsic
- if i_n_tps != 0 {
- span_err!(tcx.sess, it.span, E0440,
- "platform-specific intrinsic has wrong number of type \
- parameters: found {}, expected 0",
- i_n_tps);
- return
- }
-
- let mut structural_to_nomimal = FxHashMap::default();
-
- let sig = tcx.fn_sig(def_id);
- let sig = sig.no_bound_vars().unwrap();
- if intr.inputs.len() != sig.inputs().len() {
- span_err!(tcx.sess, it.span, E0444,
- "platform-specific intrinsic has invalid number of \
- arguments: found {}, expected {}",
- sig.inputs().len(), intr.inputs.len());
- return
- }
- let input_pairs = intr.inputs.iter().zip(sig.inputs());
- for (i, (expected_arg, arg)) in input_pairs.enumerate() {
- match_intrinsic_type_to_type(tcx, &format!("argument {}", i + 1), it.span,
- &mut structural_to_nomimal, expected_arg, arg);
- }
- match_intrinsic_type_to_type(tcx, "return value", it.span,
- &mut structural_to_nomimal,
- &intr.output, sig.output());
- return
- }
- None => {
- span_err!(tcx.sess, it.span, E0441,
- "unrecognized platform-specific intrinsic function: `{}`", name);
- return;
- }
- }
+ let msg = format!("unrecognized platform-specific intrinsic function: `{}`", name);
+ tcx.sess.span_err(it.span, &msg);
+ return;
}
};
equate_intrinsic_type(tcx, it, n_tps, Abi::PlatformIntrinsic, hir::Unsafety::Unsafe,
inputs, output)
}
-
-// walk the expected type and the actual type in lock step, checking they're
-// the same, in a kinda-structural way, i.e., `Vector`s have to be simd structs with
-// exactly the right element type
-fn match_intrinsic_type_to_type<'a, 'tcx>(
- tcx: TyCtxt<'a, 'tcx, 'tcx>,
- position: &str,
- span: Span,
- structural_to_nominal: &mut FxHashMap<&'a intrinsics::Type, Ty<'tcx>>,
- expected: &'a intrinsics::Type, t: Ty<'tcx>)
-{
- use intrinsics::Type::*;
-
- let simple_error = |real: &str, expected: &str| {
- span_err!(tcx.sess, span, E0442,
- "intrinsic {} has wrong type: found {}, expected {}",
- position, real, expected)
- };
-
- match *expected {
- Void => match t.sty {
- ty::Tuple(ref v) if v.is_empty() => {},
- _ => simple_error(&format!("`{}`", t), "()"),
- },
- // (The width we pass to LLVM doesn't concern the type checker.)
- Integer(signed, bits, _llvm_width) => match (signed, bits, &t.sty) {
- (true, 8, &ty::Int(ast::IntTy::I8)) |
- (false, 8, &ty::Uint(ast::UintTy::U8)) |
- (true, 16, &ty::Int(ast::IntTy::I16)) |
- (false, 16, &ty::Uint(ast::UintTy::U16)) |
- (true, 32, &ty::Int(ast::IntTy::I32)) |
- (false, 32, &ty::Uint(ast::UintTy::U32)) |
- (true, 64, &ty::Int(ast::IntTy::I64)) |
- (false, 64, &ty::Uint(ast::UintTy::U64)) |
- (true, 128, &ty::Int(ast::IntTy::I128)) |
- (false, 128, &ty::Uint(ast::UintTy::U128)) => {},
- _ => simple_error(&format!("`{}`", t),
- &format!("`{}{n}`",
- if signed {"i"} else {"u"},
- n = bits)),
- },
- Float(bits) => match (bits, &t.sty) {
- (32, &ty::Float(ast::FloatTy::F32)) |
- (64, &ty::Float(ast::FloatTy::F64)) => {},
- _ => simple_error(&format!("`{}`", t),
- &format!("`f{n}`", n = bits)),
- },
- Pointer(ref inner_expected, ref _llvm_type, const_) => {
- match t.sty {
- ty::RawPtr(ty::TypeAndMut { ty, mutbl }) => {
- if (mutbl == hir::MutImmutable) != const_ {
- simple_error(&format!("`{}`", t),
- if const_ {"const pointer"} else {"mut pointer"})
- }
- match_intrinsic_type_to_type(tcx, position, span, structural_to_nominal,
- inner_expected, ty)
- }
- _ => simple_error(&format!("`{}`", t), "raw pointer"),
- }
- }
- Vector(ref inner_expected, ref _llvm_type, len) => {
- if !t.is_simd() {
- simple_error(&format!("non-simd type `{}`", t), "simd type");
- return;
- }
- let t_len = t.simd_size(tcx);
- if len as usize != t_len {
- simple_error(&format!("vector with length {}", t_len),
- &format!("length {}", len));
- return;
- }
- let t_ty = t.simd_type(tcx);
- {
- // check that a given structural type always has the same an intrinsic definition
- let previous = structural_to_nominal.entry(expected).or_insert(t);
- if *previous != t {
- // this gets its own error code because it is non-trivial
- span_err!(tcx.sess, span, E0443,
- "intrinsic {} has wrong type: found `{}`, expected `{}` which \
- was used for this vector type previously in this signature",
- position,
- t,
- *previous);
- return;
- }
- }
- match_intrinsic_type_to_type(tcx,
- position,
- span,
- structural_to_nominal,
- inner_expected,
- t_ty)
- }
- Aggregate(_flatten, ref expected_contents) => {
- match t.sty {
- ty::Tuple(contents) => {
- if contents.len() != expected_contents.len() {
- simple_error(&format!("tuple with length {}", contents.len()),
- &format!("tuple with length {}", expected_contents.len()));
- return
- }
- for (e, c) in expected_contents.iter().zip(contents) {
- match_intrinsic_type_to_type(tcx, position, span, structural_to_nominal,
- e, c)
- }
- }
- _ => simple_error(&format!("`{}`", t),
- "tuple"),
- }
- }
- }
-}
diff --git a/src/librustc_typeck/check/method/mod.rs b/src/librustc_typeck/check/method/mod.rs
index 02687df..e71dc01 100644
--- a/src/librustc_typeck/check/method/mod.rs
+++ b/src/librustc_typeck/check/method/mod.rs
@@ -408,45 +408,36 @@
let tcx = self.tcx;
- let mode = probe::Mode::Path;
- match self.probe_for_name(span, mode, method_name, IsSuggestion(false),
- self_ty, expr_id, ProbeScope::TraitsInScope) {
- Ok(pick) => {
- debug!("resolve_ufcs: pick={:?}", pick);
- if let Some(import_id) = pick.import_id {
- let import_def_id = tcx.hir().local_def_id(import_id);
- debug!("resolve_ufcs: used_trait_import: {:?}", import_def_id);
- Lrc::get_mut(&mut self.tables.borrow_mut().used_trait_imports)
- .unwrap().insert(import_def_id);
+ // Check if we have an enum variant.
+ if let ty::Adt(adt_def, _) = self_ty.sty {
+ if adt_def.is_enum() {
+ let variant_def = adt_def.variants.iter().find(|vd| {
+ tcx.hygienic_eq(method_name, vd.ident, adt_def.did)
+ });
+ if let Some(variant_def) = variant_def {
+ check_type_alias_enum_variants_enabled(tcx, span);
+
+ let def = Def::VariantCtor(variant_def.did, variant_def.ctor_kind);
+ tcx.check_stability(def.def_id(), Some(expr_id), span);
+ return Ok(def);
}
-
- let def = pick.item.def();
- debug!("resolve_ufcs: def={:?}", def);
- tcx.check_stability(def.def_id(), Some(expr_id), span);
-
- Ok(def)
- }
- Err(err) => {
- // Check if we have an enum variant.
- match self_ty.sty {
- ty::Adt(adt_def, _) if adt_def.is_enum() => {
- let variant_def = adt_def.variants.iter().find(|vd| {
- tcx.hygienic_eq(method_name, vd.ident, adt_def.did)
- });
- if let Some(variant_def) = variant_def {
- check_type_alias_enum_variants_enabled(tcx, span);
-
- let def = Def::VariantCtor(variant_def.did, variant_def.ctor_kind);
- tcx.check_stability(def.def_id(), Some(expr_id), span);
- return Ok(def);
- }
- },
- _ => (),
- }
-
- Err(err)
}
}
+
+ let pick = self.probe_for_name(span, probe::Mode::Path, method_name, IsSuggestion(false),
+ self_ty, expr_id, ProbeScope::TraitsInScope)?;
+ debug!("resolve_ufcs: pick={:?}", pick);
+ if let Some(import_id) = pick.import_id {
+ let import_def_id = tcx.hir().local_def_id(import_id);
+ debug!("resolve_ufcs: used_trait_import: {:?}", import_def_id);
+ Lrc::get_mut(&mut self.tables.borrow_mut().used_trait_imports)
+ .unwrap().insert(import_def_id);
+ }
+
+ let def = pick.item.def();
+ debug!("resolve_ufcs: def={:?}", def);
+ tcx.check_stability(def.def_id(), Some(expr_id), span);
+ Ok(def)
}
/// Find item with name `item_name` defined in impl/trait `def_id`
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index 1b07385..452fd24 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -132,7 +132,8 @@
use std::slice;
use require_c_abi_if_variadic;
-use session::{CompileIncomplete, config, Session};
+use session::{CompileIncomplete, Session};
+use session::config::EntryFnType;
use TypeAndSubsts;
use lint;
use util::captures::Captures;
@@ -1163,19 +1164,18 @@
// Check that the main return type implements the termination trait.
if let Some(term_id) = fcx.tcx.lang_items().termination() {
- if let Some((id, _, entry_type)) = *fcx.tcx.sess.entry_fn.borrow() {
- if id == fn_id {
- if let config::EntryFnType::Main = entry_type {
- let substs = fcx.tcx.mk_substs_trait(declared_ret_ty, &[]);
- let trait_ref = ty::TraitRef::new(term_id, substs);
- let return_ty_span = decl.output.span();
- let cause = traits::ObligationCause::new(
- return_ty_span, fn_id, ObligationCauseCode::MainFunctionType);
+ if let Some((def_id, EntryFnType::Main)) = fcx.tcx.entry_fn(LOCAL_CRATE) {
+ let main_id = fcx.tcx.hir().as_local_node_id(def_id).unwrap();
+ if main_id == fn_id {
+ let substs = fcx.tcx.mk_substs_trait(declared_ret_ty, &[]);
+ let trait_ref = ty::TraitRef::new(term_id, substs);
+ let return_ty_span = decl.output.span();
+ let cause = traits::ObligationCause::new(
+ return_ty_span, fn_id, ObligationCauseCode::MainFunctionType);
- inherited.register_predicate(
- traits::Obligation::new(
- cause, param_env, trait_ref.to_predicate()));
- }
+ inherited.register_predicate(
+ traits::Obligation::new(
+ cause, param_env, trait_ref.to_predicate()));
}
}
}
@@ -4724,8 +4724,8 @@
} else {
Def::Err
};
- let (ty, def) = AstConv::associated_path_def_to_ty(self, node_id, path_span,
- ty, def, segment);
+ let (ty, def) = AstConv::associated_path_to_ty(self, node_id, path_span,
+ ty, def, segment, true);
// Write back the new resolution.
let hir_id = self.tcx.hir().node_to_hir_id(node_id);
diff --git a/src/librustc_typeck/coherence/mod.rs b/src/librustc_typeck/coherence/mod.rs
index ce71be0..8053ed1 100644
--- a/src/librustc_typeck/coherence/mod.rs
+++ b/src/librustc_typeck/coherence/mod.rs
@@ -171,13 +171,23 @@
// This is something like impl Trait1 for Trait2. Illegal
// if Trait1 is a supertrait of Trait2 or Trait2 is not object safe.
- if let Some(principal_def_id) = data.principal_def_id() {
- if !tcx.is_object_safe(principal_def_id) {
+ let component_def_ids = data.iter().flat_map(|predicate| {
+ match predicate.skip_binder() {
+ ty::ExistentialPredicate::Trait(tr) => Some(tr.def_id),
+ ty::ExistentialPredicate::AutoTrait(def_id) => Some(*def_id),
+ // An associated type projection necessarily comes with
+ // an additional `Trait` requirement.
+ ty::ExistentialPredicate::Projection(..) => None,
+ }
+ });
+
+ for component_def_id in component_def_ids {
+ if !tcx.is_object_safe(component_def_id) {
// This is an error, but it will be reported by wfcheck. Ignore it here.
// This is tested by `coherence-impl-trait-for-trait-object-safe.rs`.
} else {
let mut supertrait_def_ids =
- traits::supertrait_def_ids(tcx, principal_def_id);
+ traits::supertrait_def_ids(tcx, component_def_id);
if supertrait_def_ids.any(|d| d == trait_def_id) {
let sp = tcx.sess.source_map().def_span(tcx.span_of_impl(impl_def_id).unwrap());
struct_span_err!(tcx.sess,
@@ -193,6 +203,5 @@
}
}
}
- // FIXME: also check auto-trait def-ids? (e.g. `impl Sync for Foo+Sync`)?
}
}
diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs
index 67e3d12..93f14a2 100644
--- a/src/librustc_typeck/collect.rs
+++ b/src/librustc_typeck/collect.rs
@@ -715,7 +715,7 @@
// In the case of trait aliases, however, we include all bounds in the where clause,
// so e.g., `trait Foo = where u32: PartialEq<Self>` would include `u32: PartialEq<Self>`
// as one of its "superpredicates".
- let is_trait_alias = ty::is_trait_alias(tcx, trait_def_id);
+ let is_trait_alias = tcx.is_trait_alias(trait_def_id);
let superbounds2 = icx.type_parameter_bounds_in_generics(
generics, item.id, self_param_ty, OnlySelfBounds(!is_trait_alias));
@@ -2144,12 +2144,7 @@
) {
let list = match attr.meta_item_list() {
Some(list) => list,
- None => {
- let msg = "#[target_feature] attribute must be of the form \
- #[target_feature(..)]";
- tcx.sess.span_err(attr.span, &msg);
- return;
- }
+ None => return,
};
let rust_features = tcx.features();
for item in list {
@@ -2347,14 +2342,6 @@
).emit();
}
codegen_fn_attrs.export_name = Some(s);
- } else {
- struct_span_err!(
- tcx.sess,
- attr.span,
- E0558,
- "`export_name` attribute has invalid format"
- ).span_label(attr.span, "did you mean #[export_name=\"*\"]?")
- .emit();
}
} else if attr.check_name("target_feature") {
if tcx.fn_sig(id).unsafety() == Unsafety::Normal {
diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs
index 387dabe..c0a8dd8 100644
--- a/src/librustc_typeck/diagnostics.rs
+++ b/src/librustc_typeck/diagnostics.rs
@@ -516,7 +516,7 @@
For a somewhat artificial example:
```compile_fail,E0055
-#![recursion_limit="2"]
+#![recursion_limit="5"]
struct Foo;
@@ -526,9 +526,9 @@
fn main() {
let foo = Foo;
- let ref_foo = &&Foo;
+ let ref_foo = &&&&&Foo;
- // error, reached the recursion limit while auto-dereferencing `&&Foo`
+ // error, reached the recursion limit while auto-dereferencing `&&&&&Foo`
ref_foo.foo();
}
```
@@ -3369,180 +3369,6 @@
```
"##,
-E0440: r##"
-A platform-specific intrinsic function has the wrong number of type
-parameters. Erroneous code example:
-
-```compile_fail,E0440
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd<T>(x: f64x2) -> i32;
- // error: platform-specific intrinsic has wrong number of type
- // parameters
-}
-```
-
-Please refer to the function declaration to see if it corresponds
-with yours. Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2) -> i32;
-}
-```
-"##,
-
-E0441: r##"
-An unknown platform-specific intrinsic function was used. Erroneous
-code example:
-
-```compile_fail,E0441
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_ep16(x: i16x8, y: i16x8) -> i16x8;
- // error: unrecognized platform-specific intrinsic function
-}
-```
-
-Please verify that the function name wasn't misspelled, and ensure
-that it is declared in the rust source code (in the file
-src/librustc_platform_intrinsics/x86.rs). Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok!
-}
-```
-"##,
-
-E0442: r##"
-Intrinsic argument(s) and/or return value have the wrong type.
-Erroneous code example:
-
-```compile_fail,E0442
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8,
- i8, i8, i8, i8, i8, i8, i8, i8);
-#[repr(simd)]
-struct i32x4(i32, i32, i32, i32);
-#[repr(simd)]
-struct i64x2(i64, i64);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- // error: intrinsic arguments/return value have wrong type
-}
-```
-
-To fix this error, please refer to the function declaration to give
-it the awaited types. Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok!
-}
-```
-"##,
-
-E0443: r##"
-Intrinsic argument(s) and/or return value have the wrong type.
-Erroneous code example:
-
-```compile_fail,E0443
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-#[repr(simd)]
-struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8;
- // error: intrinsic argument/return value has wrong type
-}
-```
-
-To fix this error, please refer to the function declaration to give
-it the awaited types. Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok!
-}
-```
-"##,
-
-E0444: r##"
-A platform-specific intrinsic function has wrong number of arguments.
-Erroneous code example:
-
-```compile_fail,E0444
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32;
- // error: platform-specific intrinsic has invalid number of arguments
-}
-```
-
-Please refer to the function declaration to see if it corresponds
-with yours. Example:
-
-```
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2) -> i32; // ok!
-}
-```
-"##,
-
E0516: r##"
The `typeof` keyword is currently reserved but unimplemented.
Erroneous code example:
@@ -3785,29 +3611,6 @@
read://doc.rust-lang.org/reference.html#inline-attributes
"##,
-E0558: r##"
-The `export_name` attribute was malformed.
-
-Erroneous code example:
-
-```ignore (error-emitted-at-codegen-which-cannot-be-handled-by-compile_fail)
-#[export_name] // error: `export_name` attribute has invalid format
-pub fn something() {}
-
-fn main() {}
-```
-
-The `export_name` attribute expects a string in order to determine the name of
-the exported symbol. Example:
-
-```
-#[export_name = "some_function"] // ok!
-pub fn something() {}
-
-fn main() {}
-```
-"##,
-
E0559: r##"
An unknown field was specified into an enum's structure variant.
@@ -4896,6 +4699,7 @@
// E0372, // coherence not object safe
E0377, // the trait `CoerceUnsized` may only be implemented for a coercion
// between structures with the same definition
+// E0558, // replaced with a generic attribute input check
E0533, // `{}` does not name a unit variant, unit struct or a constant
// E0563, // cannot determine a type for this `impl Trait`: {} // removed in 6383de15
E0564, // only named lifetimes are allowed in `impl Trait`,
diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs
index c55a125..6c1c49b 100644
--- a/src/librustc_typeck/lib.rs
+++ b/src/librustc_typeck/lib.rs
@@ -82,7 +82,6 @@
extern crate arena;
#[macro_use] extern crate rustc;
-extern crate rustc_platform_intrinsics as intrinsics;
extern crate rustc_data_structures;
extern crate rustc_errors as errors;
extern crate rustc_target;
@@ -104,23 +103,22 @@
mod outlives;
mod variance;
-use hir::Node;
use rustc_target::spec::abi::Abi;
-use rustc::hir;
+use rustc::hir::{self, Node};
+use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::infer::InferOk;
use rustc::lint;
use rustc::middle;
use rustc::session;
-use rustc::session::config::nightly_options;
+use rustc::session::CompileIncomplete;
+use rustc::session::config::{EntryFnType, nightly_options};
use rustc::traits::{ObligationCause, ObligationCauseCode, TraitEngine, TraitEngineExt};
use rustc::ty::subst::Substs;
use rustc::ty::{self, Ty, TyCtxt};
use rustc::ty::query::Providers;
use rustc::util;
use rustc::util::profiling::ProfileCategory;
-use session::{CompileIncomplete, config};
use syntax_pos::Span;
-use syntax::ast;
use util::common::time;
use std::iter;
@@ -185,10 +183,9 @@
})
}
-fn check_main_fn_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
- main_id: ast::NodeId,
- main_span: Span) {
- let main_def_id = tcx.hir().local_def_id(main_id);
+fn check_main_fn_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, main_def_id: DefId) {
+ let main_id = tcx.hir().as_local_node_id(main_def_id).unwrap();
+ let main_span = tcx.def_span(main_def_id);
let main_t = tcx.type_of(main_def_id);
match main_t.sty {
ty::FnDef(..) => {
@@ -251,10 +248,9 @@
}
}
-fn check_start_fn_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
- start_id: ast::NodeId,
- start_span: Span) {
- let start_def_id = tcx.hir().local_def_id(start_id);
+fn check_start_fn_ty<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, start_def_id: DefId) {
+ let start_id = tcx.hir().as_local_node_id(start_def_id).unwrap();
+ let start_span = tcx.def_span(start_def_id);
let start_t = tcx.type_of(start_def_id);
match start_t.sty {
ty::FnDef(..) => {
@@ -310,11 +306,10 @@
}
fn check_for_entry_fn<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) {
- if let Some((id, sp, entry_type)) = *tcx.sess.entry_fn.borrow() {
- match entry_type {
- config::EntryFnType::Main => check_main_fn_ty(tcx, id, sp),
- config::EntryFnType::Start => check_start_fn_ty(tcx, id, sp),
- }
+ match tcx.entry_fn(LOCAL_CRATE) {
+ Some((def_id, EntryFnType::Main)) => check_main_fn_ty(tcx, def_id),
+ Some((def_id, EntryFnType::Start)) => check_start_fn_ty(tcx, def_id),
+ _ => {}
}
}
diff --git a/src/librustdoc/Cargo.toml b/src/librustdoc/Cargo.toml
index 8bac007..4b42188 100644
--- a/src/librustdoc/Cargo.toml
+++ b/src/librustdoc/Cargo.toml
@@ -9,6 +9,6 @@
[dependencies]
pulldown-cmark = { version = "0.1.2", default-features = false }
-minifier = "0.0.20"
+minifier = "0.0.26"
tempfile = "3"
parking_lot = "0.6.4"
diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs
index d991368..635d071 100644
--- a/src/librustdoc/config.rs
+++ b/src/librustdoc/config.rs
@@ -68,6 +68,9 @@
pub should_test: bool,
/// List of arguments to pass to the test harness, if running tests.
pub test_args: Vec<String>,
+ /// Optional path to persist the doctest executables to, defaults to a
+ /// temporary directory if not set.
+ pub persist_doctests: Option<PathBuf>,
// Options that affect the documentation process
@@ -121,6 +124,7 @@
.field("lint_cap", &self.lint_cap)
.field("should_test", &self.should_test)
.field("test_args", &self.test_args)
+ .field("persist_doctests", &self.persist_doctests)
.field("default_passes", &self.default_passes)
.field("manual_passes", &self.manual_passes)
.field("display_warnings", &self.display_warnings)
@@ -431,6 +435,7 @@
let enable_index_page = matches.opt_present("enable-index-page") || index_page.is_some();
let static_root_path = matches.opt_str("static-root-path");
let generate_search_filter = !matches.opt_present("disable-per-crate-search");
+ let persist_doctests = matches.opt_str("persist-doctests").map(PathBuf::from);
let (lint_opts, describe_lints, lint_cap) = get_cmd_lint_options(matches, error_format);
@@ -456,6 +461,7 @@
manual_passes,
display_warnings,
crate_version,
+ persist_doctests,
render_options: RenderOptions {
output,
external_html,
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs
index 8bb0dc9..7069f04 100644
--- a/src/librustdoc/core.rs
+++ b/src/librustdoc/core.rs
@@ -51,9 +51,6 @@
/// The stack of module NodeIds up till this point
pub crate_name: Option<String>,
pub cstore: Rc<CStore>,
- // Note that external items for which `doc(hidden)` applies to are shown as
- // non-reachable while local items aren't. This is because we're reusing
- // the access levels from crateanalysis.
/// Later on moved into `html::render::CACHE_KEY`
pub renderinfo: RefCell<RenderInfo>,
/// Later on moved through `clean::Crate` into `html::render::CACHE_KEY`
@@ -451,7 +448,6 @@
None,
&name,
None,
- resolve::MakeGlobMap::No,
&resolver_arenas,
&mut crate_loader,
|_| Ok(()));
@@ -469,15 +465,13 @@
freevars: resolver.freevars.clone(),
export_map: resolver.export_map.clone(),
trait_map: resolver.trait_map.clone(),
+ glob_map: resolver.glob_map.clone(),
maybe_unused_trait_imports: resolver.maybe_unused_trait_imports.clone(),
maybe_unused_extern_crates: resolver.maybe_unused_extern_crates.clone(),
extern_prelude: resolver.extern_prelude.iter().map(|(ident, entry)| {
(ident.name, entry.introduced_by_item)
}).collect(),
};
- let analysis = ty::CrateAnalysis {
- glob_map: if resolver.make_glob_map { Some(resolver.glob_map.clone()) } else { None },
- };
let mut arenas = AllArenas::new();
let hir_map = hir_map::map_crate(&sess, &*cstore, &mut hir_forest, &defs);
@@ -493,12 +487,11 @@
&sess,
&*cstore,
hir_map,
- analysis,
resolutions,
&mut arenas,
&name,
&output_filenames,
- |tcx, _, _, result| {
+ |tcx, _, result| {
if result.is_err() {
sess.fatal("Compilation failed, aborting rustdoc");
}
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 31e06cb..ad1659b 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -309,7 +309,7 @@
// Note that external items for which `doc(hidden)` applies to are shown as
// non-reachable while local items aren't. This is because we're reusing
- // the access levels from crateanalysis.
+ // the access levels from the privacy check pass.
pub access_levels: AccessLevels<DefId>,
/// The version of the crate being documented, if given from the `--crate-version` flag.
@@ -741,8 +741,8 @@
let mut crate_data = BTreeMap::new();
crate_data.insert("doc".to_owned(), Json::String(crate_doc));
- crate_data.insert("items".to_owned(), Json::Array(crate_items));
- crate_data.insert("paths".to_owned(), Json::Array(crate_paths));
+ crate_data.insert("i".to_owned(), Json::Array(crate_items));
+ crate_data.insert("p".to_owned(), Json::Array(crate_paths));
// Collect the index into a string
format!("searchIndex[{}] = {};",
@@ -914,12 +914,44 @@
write(cx.dst.join("COPYRIGHT.txt"),
static_files::COPYRIGHT)?;
- fn collect(path: &Path, krate: &str, key: &str) -> io::Result<(Vec<String>, Vec<String>)> {
+ fn collect(
+ path: &Path,
+ krate: &str,
+ key: &str,
+ for_search_index: bool,
+ ) -> io::Result<(Vec<String>, Vec<String>, Vec<String>)> {
+ use minifier::js;
+
let mut ret = Vec::new();
let mut krates = Vec::new();
+ let mut variables = Vec::new();
+
+ let mut krate = krate.to_owned();
+
if path.exists() {
for line in BufReader::new(File::open(path)?).lines() {
let line = line?;
+ if for_search_index && line.starts_with("var r_") {
+ variables.push(line.clone());
+ // We need to check if the crate name has been put into a variable as well.
+ let tokens = js::simple_minify(&line).apply(js::clean_tokens);
+ let mut pos = 0;
+ while pos < tokens.len() {
+ if let Some((var_pos, Some(value_pos))) =
+ js::get_variable_name_and_value_positions(&tokens, pos) {
+ if let Some(s) = tokens.0[value_pos].get_string() {
+ if &s[1..s.len() - 1] == krate {
+ if let Some(var) = tokens[var_pos].get_other() {
+ krate = var.to_owned();
+ break
+ }
+ }
+ }
+ }
+ pos += 1;
+ }
+ continue;
+ }
if !line.starts_with(key) {
continue;
}
@@ -933,7 +965,7 @@
.unwrap_or_else(|| String::new()));
}
}
- Ok((ret, krates))
+ Ok((ret, krates, variables))
}
fn show_item(item: &IndexItem, krate: &str) -> String {
@@ -948,7 +980,7 @@
let dst = cx.dst.join("aliases.js");
{
- let (mut all_aliases, _) = try_err!(collect(&dst, &krate.name, "ALIASES"), &dst);
+ let (mut all_aliases, _, _) = try_err!(collect(&dst, &krate.name, "ALIASES", false), &dst);
let mut w = try_err!(File::create(&dst), &dst);
let mut output = String::with_capacity(100);
for (alias, items) in &cache.aliases {
@@ -1035,34 +1067,38 @@
}
let dst = cx.dst.join("source-files.js");
- let (mut all_sources, _krates) = try_err!(collect(&dst, &krate.name, "sourcesIndex"), &dst);
+ let (mut all_sources, _krates, _) = try_err!(collect(&dst, &krate.name, "sourcesIndex",
+ false),
+ &dst);
all_sources.push(format!("sourcesIndex[\"{}\"] = {};",
&krate.name,
hierarchy.to_json_string()));
all_sources.sort();
let mut w = try_err!(File::create(&dst), &dst);
try_err!(writeln!(&mut w,
- "var N = null;var sourcesIndex = {{}};\n{}",
+ "var N = null;var sourcesIndex = {{}};\n{}\ncreateSourceSidebar();",
all_sources.join("\n")),
&dst);
}
// Update the search index
let dst = cx.dst.join("search-index.js");
- let (mut all_indexes, mut krates) = try_err!(collect(&dst, &krate.name, "searchIndex"), &dst);
+ let (mut all_indexes, mut krates, variables) = try_err!(collect(&dst,
+ &krate.name,
+ "searchIndex",
+ true), &dst);
all_indexes.push(search_index);
// Sort the indexes by crate so the file will be generated identically even
// with rustdoc running in parallel.
all_indexes.sort();
let mut w = try_err!(File::create(&dst), &dst);
- try_err!(writeln!(&mut w, "var N = null;var searchIndex = {{}};"), &dst);
- for index in &all_indexes {
- try_err!(write_minify_replacer(&mut w, &*index, options.enable_minification,
- &[(minifier::js::Keyword::Null, "N")]),
- &dst);
- }
- try_err!(writeln!(&mut w, "initSearch(searchIndex);addSearchOptions(searchIndex);"), &dst);
+ try_err!(writeln!(&mut w, "var N=null,E=\"\",T=\"t\",U=\"u\",searchIndex={{}};"), &dst);
+ try_err!(write_minify_replacer(&mut w,
+ &format!("{}\n{}", variables.join(""), all_indexes.join("\n")),
+ options.enable_minification),
+ &dst);
+ try_err!(write!(&mut w, "initSearch(searchIndex);addSearchOptions(searchIndex);"), &dst);
if options.enable_index_page {
if let Some(index_page) = options.index_page.clone() {
@@ -1161,8 +1197,9 @@
remote_item_type.css_class(),
remote_path[remote_path.len() - 1]));
- let (mut all_implementors, _) = try_err!(collect(&mydst, &krate.name, "implementors"),
- &mydst);
+ let (mut all_implementors, _, _) = try_err!(collect(&mydst, &krate.name, "implementors",
+ false),
+ &mydst);
all_implementors.push(implementors);
// Sort the implementors by crate so the file will be generated
// identically even with rustdoc running in parallel.
@@ -1216,14 +1253,50 @@
}
}
-fn write_minify_replacer<W: Write>(dst: &mut W,
- contents: &str,
- enable_minification: bool,
- keywords_to_replace: &[(minifier::js::Keyword, &str)])
- -> io::Result<()> {
+fn write_minify_replacer<W: Write>(
+ dst: &mut W,
+ contents: &str,
+ enable_minification: bool,
+) -> io::Result<()> {
+ use minifier::js::{Keyword, ReservedChar, Token};
+
if enable_minification {
writeln!(dst, "{}",
- minifier::js::minify_and_replace_keywords(contents, keywords_to_replace))
+ minifier::js::simple_minify(contents)
+ .apply(|f| {
+ // We keep backlines.
+ minifier::js::clean_tokens_except(f, |c| {
+ c.get_char() != Some(ReservedChar::Backline)
+ })
+ })
+ .apply(|f| {
+ minifier::js::replace_token_with(f, |t| {
+ match *t {
+ Token::Keyword(Keyword::Null) => Some(Token::Other("N")),
+ Token::String(s) => {
+ let s = &s[1..s.len() -1]; // The quotes are included
+ if s.is_empty() {
+ Some(Token::Other("E"))
+ } else if s == "t" {
+ Some(Token::Other("T"))
+ } else if s == "u" {
+ Some(Token::Other("U"))
+ } else {
+ None
+ }
+ }
+ _ => None,
+ }
+ })
+ })
+ .apply(|f| {
+ // We add a backline after the newly created variables.
+ minifier::js::aggregate_strings_with_separation(
+ f,
+ Token::Char(ReservedChar::Backline),
+ )
+ })
+ .to_string())
} else {
writeln!(dst, "{}", contents)
}
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 9db1c68..82604cc 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -1555,10 +1555,10 @@
// (String) description,
// (Number | null) the parent path index to `paths`]
// (Object | null) the type of the function (if any)
- var items = rawSearchIndex[crate].items;
+ var items = rawSearchIndex[crate].i;
// an array of [(Number) item type,
// (String) name]
- var paths = rawSearchIndex[crate].paths;
+ var paths = rawSearchIndex[crate].p;
// convert `paths` into an object form
var len = paths.length;
@@ -2431,7 +2431,7 @@
return;
}
var crates_text = [];
- if (crates.length > 1) {
+ if (Object.keys(crates).length > 1) {
for (var crate in crates) {
if (crates.hasOwnProperty(crate)) {
crates_text.push(crate);
diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css
index 8a8b7ad..3676549 100644
--- a/src/librustdoc/html/static/rustdoc.css
+++ b/src/librustdoc/html/static/rustdoc.css
@@ -391,10 +391,6 @@
display: block;
}
-.in-band, code {
- z-index: -5;
-}
-
.invisible {
width: 100%;
display: inline-block;
diff --git a/src/librustdoc/html/static/source-script.js b/src/librustdoc/html/static/source-script.js
index 0affe1c..c5d6fa1 100644
--- a/src/librustdoc/html/static/source-script.js
+++ b/src/librustdoc/html/static/source-script.js
@@ -137,5 +137,3 @@
main.insertBefore(sidebar, main.firstChild);
}
-
-createSourceSidebar();
diff --git a/src/librustdoc/html/static/themes/dark.css b/src/librustdoc/html/static/themes/dark.css
index 1390be7..52a3096 100644
--- a/src/librustdoc/html/static/themes/dark.css
+++ b/src/librustdoc/html/static/themes/dark.css
@@ -82,12 +82,6 @@
border-bottom-color: #ddd;
}
-:target { background: #494a3d; }
-
-:target > .in-band {
- background: #494a3d;
-}
-
.content .method .where,
.content .fn .where,
.content .where.fmt-newline {
@@ -252,7 +246,7 @@
color: #999;
}
-:target > code {
+:target > code, :target > .in-band {
background-color: #494a3d;
}
diff --git a/src/librustdoc/html/static/themes/light.css b/src/librustdoc/html/static/themes/light.css
index 2b04dd2..d20fea6 100644
--- a/src/librustdoc/html/static/themes/light.css
+++ b/src/librustdoc/html/static/themes/light.css
@@ -84,12 +84,6 @@
border-bottom-color: #ddd;
}
-:target { background: #FDFFD3; }
-
-:target > .in-band {
- background: #FDFFD3;
-}
-
.content .method .where,
.content .fn .where,
.content .where.fmt-newline {
@@ -247,7 +241,7 @@
color: #999;
}
-:target > code {
+:target > code, :target > .in-band {
background: #FDFFD3;
}
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index 1b6d7e8..4bbc01d 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -341,6 +341,12 @@
"disable-per-crate-search",
"disables generating the crate selector on the search box")
}),
+ unstable("persist-doctests", |o| {
+ o.optopt("",
+ "persist-doctests",
+ "Directory to persist doctest executables into",
+ "PATH")
+ }),
]
}
diff --git a/src/librustdoc/markdown.rs b/src/librustdoc/markdown.rs
index da56194..65a96e9 100644
--- a/src/librustdoc/markdown.rs
+++ b/src/librustdoc/markdown.rs
@@ -142,7 +142,7 @@
options.libs, options.codegen_options, options.externs,
true, opts, options.maybe_sysroot, None,
Some(options.input),
- options.linker, options.edition);
+ options.linker, options.edition, options.persist_doctests);
collector.set_position(DUMMY_SP);
let codes = ErrorCodes::from(UnstableFeatures::from_environment().is_nightly_build());
let res = find_testable_code(&input_str, &mut collector, codes);
diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs
index 1f19fa2..0b9fbc8 100644
--- a/src/librustdoc/test.rs
+++ b/src/librustdoc/test.rs
@@ -6,7 +6,6 @@
use rustc_driver::driver::phase_2_configure_and_expand;
use rustc_metadata::cstore::CStore;
use rustc_metadata::dynamic_lib::DynamicLibrary;
-use rustc_resolve::MakeGlobMap;
use rustc::hir;
use rustc::hir::intravisit;
use rustc::session::{self, CompileIncomplete, config};
@@ -100,7 +99,6 @@
None,
"rustdoc-test",
None,
- MakeGlobMap::No,
|_| Ok(()),
).expect("phase_2_configure_and_expand aborted in rustdoc!")
};
@@ -122,7 +120,8 @@
Some(source_map),
None,
options.linker,
- options.edition
+ options.edition,
+ options.persist_doctests,
);
{
@@ -186,7 +185,8 @@
cg: CodegenOptions, externs: Externs,
should_panic: bool, no_run: bool, as_test_harness: bool,
compile_fail: bool, mut error_codes: Vec<String>, opts: &TestOptions,
- maybe_sysroot: Option<PathBuf>, linker: Option<PathBuf>, edition: Edition) {
+ maybe_sysroot: Option<PathBuf>, linker: Option<PathBuf>, edition: Edition,
+ persist_doctests: Option<PathBuf>) {
// The test harness wants its own `main` and top-level functions, so
// never wrap the test in `fn main() { ... }`.
let (test, line_offset) = make_test(test, Some(cratename), as_test_harness, opts);
@@ -251,6 +251,20 @@
let old = io::set_panic(Some(box Sink(data.clone())));
let _bomb = Bomb(data.clone(), old.unwrap_or(box io::stdout()));
+ enum DirState {
+ Temp(tempfile::TempDir),
+ Perm(PathBuf),
+ }
+
+ impl DirState {
+ fn path(&self) -> &std::path::Path {
+ match self {
+ DirState::Temp(t) => t.path(),
+ DirState::Perm(p) => p.as_path(),
+ }
+ }
+ }
+
let (libdir, outdir, compile_result) = driver::spawn_thread_pool(sessopts, |sessopts| {
let source_map = Lrc::new(SourceMap::new(sessopts.file_path_mapping()));
let emitter = errors::emitter::EmitterWriter::new(box Sink(data.clone()),
@@ -269,7 +283,26 @@
rustc_lint::register_builtins(&mut sess.lint_store.borrow_mut(), Some(&sess));
let outdir = Mutex::new(
- TempFileBuilder::new().prefix("rustdoctest").tempdir().expect("rustdoc needs a tempdir")
+ if let Some(mut path) = persist_doctests {
+ path.push(format!("{}_{}",
+ filename
+ .to_string()
+ .rsplit('/')
+ .next()
+ .unwrap()
+ .replace(".", "_"),
+ line)
+ );
+ std::fs::create_dir_all(&path)
+ .expect("Couldn't create directory for doctest executables");
+
+ DirState::Perm(path)
+ } else {
+ DirState::Temp(TempFileBuilder::new()
+ .prefix("rustdoctest")
+ .tempdir()
+ .expect("rustdoc needs a tempdir"))
+ }
);
let libdir = sess.target_filesearch(PathKind::All).get_lib_path();
let mut control = driver::CompileController::basic();
@@ -631,13 +664,15 @@
filename: Option<PathBuf>,
linker: Option<PathBuf>,
edition: Edition,
+ persist_doctests: Option<PathBuf>,
}
impl Collector {
pub fn new(cratename: String, cfgs: Vec<String>, libs: Vec<SearchPath>, cg: CodegenOptions,
externs: Externs, use_headers: bool, opts: TestOptions,
maybe_sysroot: Option<PathBuf>, source_map: Option<Lrc<SourceMap>>,
- filename: Option<PathBuf>, linker: Option<PathBuf>, edition: Edition) -> Collector {
+ filename: Option<PathBuf>, linker: Option<PathBuf>, edition: Edition,
+ persist_doctests: Option<PathBuf>) -> Collector {
Collector {
tests: Vec::new(),
names: Vec::new(),
@@ -654,6 +689,7 @@
filename,
linker,
edition,
+ persist_doctests,
}
}
@@ -697,6 +733,8 @@
let maybe_sysroot = self.maybe_sysroot.clone();
let linker = self.linker.clone();
let edition = config.edition.unwrap_or(self.edition);
+ let persist_doctests = self.persist_doctests.clone();
+
debug!("Creating test {}: {}", name, test);
self.tests.push(testing::TestDescAndFn {
desc: testing::TestDesc {
@@ -729,7 +767,8 @@
&opts,
maybe_sysroot,
linker,
- edition)
+ edition,
+ persist_doctests)
}))
} {
Ok(()) => (),
diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs
index 3c28959..362b457 100644
--- a/src/libserialize/json.rs
+++ b/src/libserialize/json.rs
@@ -1,4 +1,4 @@
-// Rust JSON serialization library
+// Rust JSON serialization library.
// Copyright (c) 2011 Google Inc.
#![forbid(non_camel_case_types)]
diff --git a/src/libstd/ffi/mod.rs b/src/libstd/ffi/mod.rs
index 62081e7..7a38f0e 100644
--- a/src/libstd/ffi/mod.rs
+++ b/src/libstd/ffi/mod.rs
@@ -169,7 +169,7 @@
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
- issue = "27745")]
+ issue = "44930")]
pub use core::ffi::VaList;
mod c_str;
diff --git a/src/libstd/fs.rs b/src/libstd/fs.rs
index 119b3f7..3538816 100644
--- a/src/libstd/fs.rs
+++ b/src/libstd/fs.rs
@@ -1121,7 +1121,9 @@
/// writing.
///
/// This operation does **not** modify the filesystem. To modify the
- /// filesystem use the `fs::set_permissions` function.
+ /// filesystem use the [`fs::set_permissions`] function.
+ ///
+ /// [`fs::set_permissions`]: fn.set_permissions.html
///
/// # Examples
///
@@ -1639,10 +1641,15 @@
///
/// The `dst` path will be a symbolic link pointing to the `src` path.
/// On Windows, this will be a file symlink, not a directory symlink;
-/// for this reason, the platform-specific `std::os::unix::fs::symlink`
-/// and `std::os::windows::fs::{symlink_file, symlink_dir}` should be
+/// for this reason, the platform-specific [`std::os::unix::fs::symlink`]
+/// and [`std::os::windows::fs::symlink_file`] or [`symlink_dir`] should be
/// used instead to make the intent explicit.
///
+/// [`std::os::unix::fs::symlink`]: ../os/unix/fs/fn.symlink.html
+/// [`std::os::windows::fs::symlink_file`]: ../os/windows/fs/fn.symlink_file.html
+/// [`symlink_dir`]: ../os/windows/fs/fn.symlink_dir.html
+///
+///
/// # Examples
///
/// ```no_run
@@ -1795,7 +1802,7 @@
/// * If any directory in the path specified by `path`
/// does not already exist and it could not be created otherwise. The specific
/// error conditions for when a directory is being created (after it is
-/// determined to not exist) are outlined by `fs::create_dir`.
+/// determined to not exist) are outlined by [`fs::create_dir`].
///
/// Notable exception is made for situations where any of the directories
/// specified in the `path` could not be created as it was being created concurrently.
@@ -1803,6 +1810,8 @@
/// concurrently from multiple threads or processes is guaranteed not to fail
/// due to a race condition with itself.
///
+/// [`fs::create_dir`]: fn.create_dir.html
+///
/// # Examples
///
/// ```no_run
@@ -1868,7 +1877,10 @@
///
/// # Errors
///
-/// See `file::remove_file` and `fs::remove_dir`.
+/// See [`fs::remove_file`] and [`fs::remove_dir`].
+///
+/// [`fs::remove_file`]: fn.remove_file.html
+/// [`fs::remove_dir`]: fn.remove_dir.html
///
/// # Examples
///
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index 41f1ac8..83db3f3 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -286,6 +286,7 @@
#![feature(staged_api)]
#![feature(stmt_expr_attributes)]
#![feature(str_internals)]
+#![feature(renamed_spin_loop)]
#![feature(rustc_private)]
#![feature(thread_local)]
#![feature(toowned_clone_into)]
diff --git a/src/libstd/memchr.rs b/src/libstd/memchr.rs
index b43a299..9f44c67 100644
--- a/src/libstd/memchr.rs
+++ b/src/libstd/memchr.rs
@@ -1,5 +1,4 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
/// A safe interface to `memchr`.
diff --git a/src/libstd/prelude/mod.rs b/src/libstd/prelude/mod.rs
index ec8318f..bf689ba 100644
--- a/src/libstd/prelude/mod.rs
+++ b/src/libstd/prelude/mod.rs
@@ -44,8 +44,8 @@
//! The current version of the prelude (version 1) lives in
//! [`std::prelude::v1`], and re-exports the following.
//!
-//! * [`std::marker`]::{[`Copy`], [`Send`], [`Sized`], [`Sync`]}. The marker
-//! traits indicate fundamental properties of types.
+//! * [`std::marker`]::{[`Copy`], [`Send`], [`Sized`], [`Sync`], [`Unpin`]}. The
+//! marker traits indicate fundamental properties of types.
//! * [`std::ops`]::{[`Drop`], [`Fn`], [`FnMut`], [`FnOnce`]}. Various
//! operations for both destructors and overloading `()`.
//! * [`std::mem`]::[`drop`][`mem::drop`], a convenience function for explicitly
@@ -108,6 +108,7 @@
//! [`Sync`]: ../marker/trait.Sync.html
//! [`ToOwned`]: ../borrow/trait.ToOwned.html
//! [`ToString`]: ../string/trait.ToString.html
+//! [`Unpin`]: ../marker/trait.Unpin.html
//! [`Vec`]: ../vec/struct.Vec.html
//! [`Clone::clone`]: ../clone/trait.Clone.html#tymethod.clone
//! [`mem::drop`]: ../mem/fn.drop.html
diff --git a/src/libstd/sys/cloudabi/abi/cloudabi.rs b/src/libstd/sys/cloudabi/abi/cloudabi.rs
index aac1804..0bf8c2d 100644
--- a/src/libstd/sys/cloudabi/abi/cloudabi.rs
+++ b/src/libstd/sys/cloudabi/abi/cloudabi.rs
@@ -1,4 +1,4 @@
-// Copyright (c) 2016-2017 Nuxi (https://nuxi.nl/) and contributors.
+// Copyright (c) 2016-2017 Nuxi <https://nuxi.nl/> and contributors.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
diff --git a/src/libstd/sys/redox/memchr.rs b/src/libstd/sys/redox/memchr.rs
index 409d3a7..d2bfcce 100644
--- a/src/libstd/sys/redox/memchr.rs
+++ b/src/libstd/sys/redox/memchr.rs
@@ -1,5 +1,4 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
pub use core::slice::memchr::{memchr, memrchr};
diff --git a/src/libstd/sys/unix/memchr.rs b/src/libstd/sys/unix/memchr.rs
index 05bfecd..ec04a22 100644
--- a/src/libstd/sys/unix/memchr.rs
+++ b/src/libstd/sys/unix/memchr.rs
@@ -1,5 +1,4 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
pub fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {
diff --git a/src/libstd/sys/windows/memchr.rs b/src/libstd/sys/windows/memchr.rs
index 87b1aa2..b9e5bcc 100644
--- a/src/libstd/sys/windows/memchr.rs
+++ b/src/libstd/sys/windows/memchr.rs
@@ -1,6 +1,5 @@
-//
-// Original implementation taken from rust-memchr
+// Original implementation taken from rust-memchr.
// Copyright 2015 Andrew Gallant, bluss and Nicolas Koch
-// Fallback memchr is fastest on windows
+// Fallback memchr is fastest on Windows.
pub use core::slice::memchr::{memchr, memrchr};
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index e3a8980..bbcaaac 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -15,7 +15,7 @@
use source_map::{dummy_spanned, respan, Spanned};
use symbol::{keywords, Symbol};
use syntax_pos::{Span, DUMMY_SP};
-use tokenstream::{ThinTokenStream, TokenStream};
+use tokenstream::TokenStream;
use ThinVec;
use rustc_data_structures::fx::FxHashSet;
@@ -853,13 +853,13 @@
pub type SpannedIdent = Spanned<Ident>;
-#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
+#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
pub enum BlockCheckMode {
Default,
Unsafe(UnsafeSource),
}
-#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Copy)]
+#[derive(Clone, PartialEq, RustcEncodable, RustcDecodable, Debug, Copy)]
pub enum UnsafeSource {
CompilerGenerated,
UserProvided,
@@ -1216,7 +1216,7 @@
pub struct Mac_ {
pub path: Path,
pub delim: MacDelimiter,
- pub tts: ThinTokenStream,
+ pub tts: TokenStream,
}
#[derive(Copy, Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Debug)]
@@ -1228,13 +1228,13 @@
impl Mac_ {
pub fn stream(&self) -> TokenStream {
- self.tts.stream()
+ self.tts.clone()
}
}
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
pub struct MacroDef {
- pub tokens: ThinTokenStream,
+ pub tokens: TokenStream,
pub legacy: bool,
}
diff --git a/src/libsyntax/attr/builtin.rs b/src/libsyntax/attr/builtin.rs
index 98585dc..15e4804 100644
--- a/src/libsyntax/attr/builtin.rs
+++ b/src/libsyntax/attr/builtin.rs
@@ -436,9 +436,6 @@
}
_ => unreachable!()
}
- } else {
- span_err!(diagnostic, attr.span(), E0548, "incorrect stability attribute type");
- continue
}
}
diff --git a/src/libsyntax/attr/mod.rs b/src/libsyntax/attr/mod.rs
index d03563f..f6d7590 100644
--- a/src/libsyntax/attr/mod.rs
+++ b/src/libsyntax/attr/mod.rs
@@ -481,28 +481,33 @@
{
// FIXME: Share code with `parse_path`.
let ident = match tokens.next() {
- Some(TokenTree::Token(span, Token::Ident(ident, _))) => {
- if let Some(TokenTree::Token(_, Token::ModSep)) = tokens.peek() {
- let mut segments = vec![PathSegment::from_ident(ident.with_span_pos(span))];
- tokens.next();
- loop {
- if let Some(TokenTree::Token(span,
- Token::Ident(ident, _))) = tokens.next() {
- segments.push(PathSegment::from_ident(ident.with_span_pos(span)));
- } else {
- return None;
- }
- if let Some(TokenTree::Token(_, Token::ModSep)) = tokens.peek() {
- tokens.next();
- } else {
- break;
- }
+ Some(TokenTree::Token(span, token @ Token::Ident(..))) |
+ Some(TokenTree::Token(span, token @ Token::ModSep)) => 'arm: {
+ let mut segments = if let Token::Ident(ident, _) = token {
+ if let Some(TokenTree::Token(_, Token::ModSep)) = tokens.peek() {
+ tokens.next();
+ vec![PathSegment::from_ident(ident.with_span_pos(span))]
+ } else {
+ break 'arm Path::from_ident(ident.with_span_pos(span));
}
- let span = span.with_hi(segments.last().unwrap().ident.span.hi());
- Path { span, segments }
} else {
- Path::from_ident(ident.with_span_pos(span))
+ vec![PathSegment::path_root(span)]
+ };
+ loop {
+ if let Some(TokenTree::Token(span,
+ Token::Ident(ident, _))) = tokens.next() {
+ segments.push(PathSegment::from_ident(ident.with_span_pos(span)));
+ } else {
+ return None;
+ }
+ if let Some(TokenTree::Token(_, Token::ModSep)) = tokens.peek() {
+ tokens.next();
+ } else {
+ break;
+ }
}
+ let span = span.with_hi(segments.last().unwrap().ident.span.hi());
+ Path { span, segments }
}
Some(TokenTree::Token(_, Token::Interpolated(ref nt))) => match nt.0 {
token::Nonterminal::NtIdent(ident, _) => Path::from_ident(ident),
@@ -565,7 +570,7 @@
}
Some(TokenTree::Delimited(_, delim, ref tts)) if delim == token::Paren => {
tokens.next();
- tts.stream()
+ tts.clone()
}
_ => return Some(MetaItemKind::Word),
};
diff --git a/src/libsyntax/config.rs b/src/libsyntax/config.rs
index a987f53..50e0056 100644
--- a/src/libsyntax/config.rs
+++ b/src/libsyntax/config.rs
@@ -166,12 +166,9 @@
true
};
- let meta_item = if let Some(meta_item) = attr.meta() {
- meta_item
- } else {
- // Not a well-formed meta-item. Why? We don't know.
- return error(attr.span, "`cfg` is not a well-formed meta-item",
- "#[cfg(/* predicate */)]");
+ let meta_item = match attr.parse_meta(self.sess) {
+ Ok(meta_item) => meta_item,
+ Err(mut err) => { err.emit(); return true; }
};
let nested_meta_items = if let Some(nested_meta_items) = meta_item.meta_item_list() {
nested_meta_items
diff --git a/src/libsyntax/diagnostic_list.rs b/src/libsyntax/diagnostic_list.rs
index 548bf8b..2c367f1 100644
--- a/src/libsyntax/diagnostic_list.rs
+++ b/src/libsyntax/diagnostic_list.rs
@@ -389,12 +389,12 @@
E0545, // incorrect 'issue'
E0546, // missing 'feature'
E0547, // missing 'issue'
- E0548, // incorrect stability attribute type
+// E0548, // replaced with a generic attribute input check
E0549, // rustc_deprecated attribute must be paired with either stable or unstable attribute
E0550, // multiple deprecated attributes
E0551, // incorrect meta item
E0553, // multiple rustc_const_unstable attributes
- E0555, // malformed feature attribute, expected #![feature(...)]
+// E0555, // replaced with a generic attribute input check
E0556, // malformed feature, expected just one word
E0584, // file for module `..` found at both .. and ..
E0629, // missing 'feature' (rustc_const_unstable)
diff --git a/src/libsyntax/early_buffered_lints.rs b/src/libsyntax/early_buffered_lints.rs
index 204e076..cf9671a 100644
--- a/src/libsyntax/early_buffered_lints.rs
+++ b/src/libsyntax/early_buffered_lints.rs
@@ -11,6 +11,7 @@
pub enum BufferedEarlyLintId {
/// Usage of `?` as a macro separator is deprecated.
QuestionMarkMacroSep,
+ IllFormedAttributeInput,
}
/// Stores buffered lint info which can later be passed to `librustc`.
diff --git a/src/libsyntax/ext/derive.rs b/src/libsyntax/ext/derive.rs
index d5a51bc..7ef09ce 100644
--- a/src/libsyntax/ext/derive.rs
+++ b/src/libsyntax/ext/derive.rs
@@ -15,6 +15,11 @@
if attr.path != "derive" {
return true;
}
+ if !attr.is_meta_item_list() {
+ cx.span_err(attr.span,
+ "attribute must be of the form `#[derive(Trait1, Trait2, ...)]`");
+ return false;
+ }
match attr.parse_list(cx.parse_sess,
|parser| parser.parse_path_allowing_meta(PathStyle::Mod)) {
diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs
index c312414..c01e7f5 100644
--- a/src/libsyntax/ext/quote.rs
+++ b/src/libsyntax/ext/quote.rs
@@ -748,7 +748,7 @@
},
TokenTree::Delimited(span, delim, ref tts) => {
let mut stmts = statements_mk_tt(cx, &TokenTree::open_tt(span.open, delim), false);
- stmts.extend(statements_mk_tts(cx, tts.stream()));
+ stmts.extend(statements_mk_tts(cx, tts.clone()));
stmts.extend(statements_mk_tt(cx, &TokenTree::close_tt(span.close, delim), false));
stmts
}
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs
index 24202ca..9a129e7 100644
--- a/src/libsyntax/ext/tt/macro_rules.rs
+++ b/src/libsyntax/ext/tt/macro_rules.rs
@@ -435,7 +435,8 @@
match *seq_tt {
TokenTree::MetaVarDecl(_, _, id) => id.name == "vis",
TokenTree::Sequence(_, ref sub_seq) =>
- sub_seq.op == quoted::KleeneOp::ZeroOrMore,
+ sub_seq.op == quoted::KleeneOp::ZeroOrMore
+ || sub_seq.op == quoted::KleeneOp::ZeroOrOne,
_ => false,
}
}) {
@@ -543,7 +544,10 @@
}
// Reverse scan: Sequence comes before `first`.
- if subfirst.maybe_empty || seq_rep.op == quoted::KleeneOp::ZeroOrMore {
+ if subfirst.maybe_empty
+ || seq_rep.op == quoted::KleeneOp::ZeroOrMore
+ || seq_rep.op == quoted::KleeneOp::ZeroOrOne
+ {
// If sequence is potentially empty, then
// union them (preserving first emptiness).
first.add_all(&TokenSet { maybe_empty: true, ..subfirst });
@@ -591,8 +595,10 @@
assert!(first.maybe_empty);
first.add_all(subfirst);
- if subfirst.maybe_empty ||
- seq_rep.op == quoted::KleeneOp::ZeroOrMore {
+ if subfirst.maybe_empty
+ || seq_rep.op == quoted::KleeneOp::ZeroOrMore
+ || seq_rep.op == quoted::KleeneOp::ZeroOrOne
+ {
// continue scanning for more first
// tokens, but also make sure we
// restore empty-tracking state
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index ed278e8..9b54e8f 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -19,6 +19,7 @@
use rustc_target::spec::abi::Abi;
use ast::{self, NodeId, PatKind, RangeEnd};
use attr;
+use early_buffered_lints::BufferedEarlyLintId;
use source_map::Spanned;
use edition::{ALL_EDITIONS, Edition};
use syntax_pos::{Span, DUMMY_SP};
@@ -715,6 +716,47 @@
Ungated,
}
+/// A template that the attribute input must match.
+/// Only top-level shape (`#[attr]` vs `#[attr(...)]` vs `#[attr = ...]`) is considered now.
+#[derive(Clone, Copy)]
+pub struct AttributeTemplate {
+ word: bool,
+ list: Option<&'static str>,
+ name_value_str: Option<&'static str>,
+}
+
+impl AttributeTemplate {
+ /// Check that the given meta-item is compatible with this template.
+ fn compatible(&self, meta_item_kind: &ast::MetaItemKind) -> bool {
+ match meta_item_kind {
+ ast::MetaItemKind::Word => self.word,
+ ast::MetaItemKind::List(..) => self.list.is_some(),
+ ast::MetaItemKind::NameValue(lit) if lit.node.is_str() => self.name_value_str.is_some(),
+ ast::MetaItemKind::NameValue(..) => false,
+ }
+ }
+}
+
+/// A convenience macro for constructing attribute templates.
+/// E.g. `template!(Word, List: "description")` means that the attribute
+/// supports forms `#[attr]` and `#[attr(description)]`.
+macro_rules! template {
+ (Word) => { template!(@ true, None, None) };
+ (List: $descr: expr) => { template!(@ false, Some($descr), None) };
+ (NameValueStr: $descr: expr) => { template!(@ false, None, Some($descr)) };
+ (Word, List: $descr: expr) => { template!(@ true, Some($descr), None) };
+ (Word, NameValueStr: $descr: expr) => { template!(@ true, None, Some($descr)) };
+ (List: $descr1: expr, NameValueStr: $descr2: expr) => {
+ template!(@ false, Some($descr1), Some($descr2))
+ };
+ (Word, List: $descr1: expr, NameValueStr: $descr2: expr) => {
+ template!(@ true, Some($descr1), Some($descr2))
+ };
+ (@ $word: expr, $list: expr, $name_value_str: expr) => { AttributeTemplate {
+ word: $word, list: $list, name_value_str: $name_value_str
+ } };
+}
+
impl AttributeGate {
fn is_deprecated(&self) -> bool {
match *self {
@@ -752,225 +794,241 @@
}}
}
-pub fn deprecated_attributes() -> Vec<&'static (&'static str, AttributeType, AttributeGate)> {
- BUILTIN_ATTRIBUTES.iter().filter(|a| a.2.is_deprecated()).collect()
+pub fn deprecated_attributes() -> Vec<&'static (&'static str, AttributeType,
+ AttributeTemplate, AttributeGate)> {
+ BUILTIN_ATTRIBUTES.iter().filter(|(.., gate)| gate.is_deprecated()).collect()
}
pub fn is_builtin_attr_name(name: ast::Name) -> bool {
- BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, _, _)| name == builtin_name)
+ BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, ..)| name == builtin_name)
}
pub fn is_builtin_attr(attr: &ast::Attribute) -> bool {
- BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, _, _)| attr.path == builtin_name)
+ BUILTIN_ATTRIBUTES.iter().any(|&(builtin_name, ..)| attr.path == builtin_name)
}
// Attributes that have a special meaning to rustc or rustdoc
-pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeGate)] = &[
+pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeTemplate, AttributeGate)] = &[
// Normal attributes
- ("warn", Normal, Ungated),
- ("allow", Normal, Ungated),
- ("forbid", Normal, Ungated),
- ("deny", Normal, Ungated),
+ ("warn", Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), Ungated),
+ ("allow", Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), Ungated),
+ ("forbid", Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), Ungated),
+ ("deny", Normal, template!(List: r#"lint1, lint2, ..., /*opt*/ reason = "...""#), Ungated),
- ("macro_use", Normal, Ungated),
- ("macro_export", Normal, Ungated),
- ("plugin_registrar", Normal, Ungated),
+ ("macro_use", Normal, template!(Word, List: "name1, name2, ..."), Ungated),
+ ("macro_export", Normal, template!(Word, List: "local_inner_macros"), Ungated),
+ ("plugin_registrar", Normal, template!(Word), Ungated),
- ("cfg", Normal, Ungated),
- ("cfg_attr", Normal, Ungated),
- ("main", Normal, Ungated),
- ("start", Normal, Ungated),
- ("repr", Normal, Ungated),
- ("path", Normal, Ungated),
- ("abi", Normal, Ungated),
- ("automatically_derived", Normal, Ungated),
- ("no_mangle", Normal, Ungated),
- ("no_link", Normal, Ungated),
- ("derive", Normal, Ungated),
- ("should_panic", Normal, Ungated),
- ("ignore", Normal, Ungated),
- ("no_implicit_prelude", Normal, Ungated),
- ("reexport_test_harness_main", Normal, Ungated),
- ("link_args", Normal, Gated(Stability::Unstable,
+ ("cfg", Normal, template!(List: "predicate"), Ungated),
+ ("cfg_attr", Normal, template!(List: "predicate, attr1, attr2, ..."), Ungated),
+ ("main", Normal, template!(Word), Ungated),
+ ("start", Normal, template!(Word), Ungated),
+ ("repr", Normal, template!(List: "C, packed, ..."), Ungated),
+ ("path", Normal, template!(NameValueStr: "file"), Ungated),
+ ("automatically_derived", Normal, template!(Word), Ungated),
+ ("no_mangle", Normal, template!(Word), Ungated),
+ ("no_link", Normal, template!(Word), Ungated),
+ ("derive", Normal, template!(List: "Trait1, Trait2, ..."), Ungated),
+ ("should_panic", Normal, template!(Word, List: r#"expected = "reason"#, NameValueStr: "reason"),
+ Ungated),
+ ("ignore", Normal, template!(Word, NameValueStr: "reason"), Ungated),
+ ("no_implicit_prelude", Normal, template!(Word), Ungated),
+ ("reexport_test_harness_main", Normal, template!(NameValueStr: "name"), Ungated),
+ ("link_args", Normal, template!(NameValueStr: "args"), Gated(Stability::Unstable,
"link_args",
"the `link_args` attribute is experimental and not \
portable across platforms, it is recommended to \
use `#[link(name = \"foo\")] instead",
cfg_fn!(link_args))),
- ("macro_escape", Normal, Ungated),
+ ("macro_escape", Normal, template!(Word), Ungated),
// RFC #1445.
- ("structural_match", Whitelisted, Gated(Stability::Unstable,
+ ("structural_match", Whitelisted, template!(Word), Gated(Stability::Unstable,
"structural_match",
"the semantics of constant patterns is \
not yet settled",
cfg_fn!(structural_match))),
// RFC #2008
- ("non_exhaustive", Whitelisted, Gated(Stability::Unstable,
+ ("non_exhaustive", Whitelisted, template!(Word), Gated(Stability::Unstable,
"non_exhaustive",
"non exhaustive is an experimental feature",
cfg_fn!(non_exhaustive))),
// RFC #1268
- ("marker", Normal, Gated(Stability::Unstable,
+ ("marker", Normal, template!(Word), Gated(Stability::Unstable,
"marker_trait_attr",
"marker traits is an experimental feature",
cfg_fn!(marker_trait_attr))),
- ("plugin", CrateLevel, Gated(Stability::Unstable,
+ ("plugin", CrateLevel, template!(List: "name|name(args)"), Gated(Stability::Unstable,
"plugin",
"compiler plugins are experimental \
and possibly buggy",
cfg_fn!(plugin))),
- ("no_std", CrateLevel, Ungated),
- ("no_core", CrateLevel, Gated(Stability::Unstable,
+ ("no_std", CrateLevel, template!(Word), Ungated),
+ ("no_core", CrateLevel, template!(Word), Gated(Stability::Unstable,
"no_core",
"no_core is experimental",
cfg_fn!(no_core))),
- ("lang", Normal, Gated(Stability::Unstable,
+ ("lang", Normal, template!(NameValueStr: "name"), Gated(Stability::Unstable,
"lang_items",
"language items are subject to change",
cfg_fn!(lang_items))),
- ("linkage", Whitelisted, Gated(Stability::Unstable,
+ ("linkage", Whitelisted, template!(NameValueStr: "external|internal|..."),
+ Gated(Stability::Unstable,
"linkage",
"the `linkage` attribute is experimental \
and not portable across platforms",
cfg_fn!(linkage))),
- ("thread_local", Whitelisted, Gated(Stability::Unstable,
+ ("thread_local", Whitelisted, template!(Word), Gated(Stability::Unstable,
"thread_local",
"`#[thread_local]` is an experimental feature, and does \
not currently handle destructors.",
cfg_fn!(thread_local))),
- ("rustc_on_unimplemented", Normal, Gated(Stability::Unstable,
+ ("rustc_on_unimplemented", Normal, template!(List:
+ r#"/*opt*/ message = "...", /*opt*/ label = "...", /*opt*/ note = "...""#,
+ NameValueStr: "message"),
+ Gated(Stability::Unstable,
"on_unimplemented",
"the `#[rustc_on_unimplemented]` attribute \
is an experimental feature",
cfg_fn!(on_unimplemented))),
- ("rustc_const_unstable", Normal, Gated(Stability::Unstable,
+ ("rustc_const_unstable", Normal, template!(List: r#"feature = "name""#),
+ Gated(Stability::Unstable,
"rustc_const_unstable",
"the `#[rustc_const_unstable]` attribute \
is an internal feature",
cfg_fn!(rustc_const_unstable))),
- ("global_allocator", Normal, Ungated),
- ("default_lib_allocator", Whitelisted, Gated(Stability::Unstable,
+ ("global_allocator", Normal, template!(Word), Ungated),
+ ("default_lib_allocator", Whitelisted, template!(Word), Gated(Stability::Unstable,
"allocator_internals",
"the `#[default_lib_allocator]` \
attribute is an experimental feature",
cfg_fn!(allocator_internals))),
- ("needs_allocator", Normal, Gated(Stability::Unstable,
+ ("needs_allocator", Normal, template!(Word), Gated(Stability::Unstable,
"allocator_internals",
"the `#[needs_allocator]` \
attribute is an experimental \
feature",
cfg_fn!(allocator_internals))),
- ("panic_runtime", Whitelisted, Gated(Stability::Unstable,
+ ("panic_runtime", Whitelisted, template!(Word), Gated(Stability::Unstable,
"panic_runtime",
"the `#[panic_runtime]` attribute is \
an experimental feature",
cfg_fn!(panic_runtime))),
- ("needs_panic_runtime", Whitelisted, Gated(Stability::Unstable,
+ ("needs_panic_runtime", Whitelisted, template!(Word), Gated(Stability::Unstable,
"needs_panic_runtime",
"the `#[needs_panic_runtime]` \
attribute is an experimental \
feature",
cfg_fn!(needs_panic_runtime))),
- ("rustc_outlives", Normal, Gated(Stability::Unstable,
+ ("rustc_outlives", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_outlives]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_variance", Normal, Gated(Stability::Unstable,
+ ("rustc_variance", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_variance]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_regions", Normal, Gated(Stability::Unstable,
+ ("rustc_regions", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_regions]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_error", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_error", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_error]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_dump_user_substs", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_dump_user_substs", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_if_this_changed", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_if_this_changed", Whitelisted, template!(Word, List: "DepNode"),
+ Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_if_this_changed]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_then_this_would_need", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_then_this_would_need", Whitelisted, template!(List: "DepNode"),
+ Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_if_this_changed]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_dirty", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_dirty", Whitelisted, template!(List: r#"cfg = "...", /*opt*/ label = "...",
+ /*opt*/ except = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_dirty]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_clean", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_clean", Whitelisted, template!(List: r#"cfg = "...", /*opt*/ label = "...",
+ /*opt*/ except = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_clean]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_partition_reused", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_partition_reused", Whitelisted, template!(List: r#"cfg = "...", module = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_partition_codegened", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_partition_codegened", Whitelisted, template!(List: r#"cfg = "...", module = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_expected_cgu_reuse", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_expected_cgu_reuse", Whitelisted, template!(List: r#"cfg = "...", module = "...",
+ kind = "...""#),
+ Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_synthetic", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_synthetic", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"this attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_symbol_name", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_symbol_name", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"internal rustc attributes will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_item_path", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_item_path", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"internal rustc attributes will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_mir", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_mir", Whitelisted, template!(List: "arg1, arg2, ..."), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_mir]` attribute \
is just used for rustc unit tests \
and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_inherit_overflow_checks", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_inherit_overflow_checks", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_inherit_overflow_checks]` \
attribute is just used to control \
@@ -979,41 +1037,35 @@
across crates and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_dump_program_clauses", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_dump_program_clauses", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_dump_program_clauses]` \
attribute is just used for rustc unit \
tests and will never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_test_marker", Normal, Gated(Stability::Unstable,
+ ("rustc_test_marker", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"the `#[rustc_test_marker]` attribute \
is used internally to track tests",
cfg_fn!(rustc_attrs))),
- ("rustc_transparent_macro", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_transparent_macro", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"used internally for testing macro hygiene",
cfg_fn!(rustc_attrs))),
-
- // RFC #2094
- ("nll", Whitelisted, Gated(Stability::Unstable,
- "nll",
- "Non lexical lifetimes",
- cfg_fn!(nll))),
- ("compiler_builtins", Whitelisted, Gated(Stability::Unstable,
+ ("compiler_builtins", Whitelisted, template!(Word), Gated(Stability::Unstable,
"compiler_builtins",
"the `#[compiler_builtins]` attribute is used to \
identify the `compiler_builtins` crate which \
contains compiler-rt intrinsics and will never be \
stable",
cfg_fn!(compiler_builtins))),
- ("sanitizer_runtime", Whitelisted, Gated(Stability::Unstable,
+ ("sanitizer_runtime", Whitelisted, template!(Word), Gated(Stability::Unstable,
"sanitizer_runtime",
"the `#[sanitizer_runtime]` attribute is used to \
identify crates that contain the runtime of a \
sanitizer and will never be stable",
cfg_fn!(sanitizer_runtime))),
- ("profiler_runtime", Whitelisted, Gated(Stability::Unstable,
+ ("profiler_runtime", Whitelisted, template!(Word), Gated(Stability::Unstable,
"profiler_runtime",
"the `#[profiler_runtime]` attribute is used to \
identify the `profiler_builtins` crate which \
@@ -1021,55 +1073,58 @@
stable",
cfg_fn!(profiler_runtime))),
- ("allow_internal_unstable", Normal, Gated(Stability::Unstable,
+ ("allow_internal_unstable", Normal, template!(Word), Gated(Stability::Unstable,
"allow_internal_unstable",
EXPLAIN_ALLOW_INTERNAL_UNSTABLE,
cfg_fn!(allow_internal_unstable))),
- ("allow_internal_unsafe", Normal, Gated(Stability::Unstable,
+ ("allow_internal_unsafe", Normal, template!(Word), Gated(Stability::Unstable,
"allow_internal_unsafe",
EXPLAIN_ALLOW_INTERNAL_UNSAFE,
cfg_fn!(allow_internal_unsafe))),
- ("fundamental", Whitelisted, Gated(Stability::Unstable,
+ ("fundamental", Whitelisted, template!(Word), Gated(Stability::Unstable,
"fundamental",
"the `#[fundamental]` attribute \
is an experimental feature",
cfg_fn!(fundamental))),
- ("proc_macro_derive", Normal, Ungated),
+ ("proc_macro_derive", Normal, template!(List: "TraitName, \
+ /*opt*/ attributes(name1, name2, ...)"),
+ Ungated),
- ("rustc_copy_clone_marker", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_copy_clone_marker", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"internal implementation detail",
cfg_fn!(rustc_attrs))),
// FIXME: #14408 whitelist docs since rustdoc looks at them
- ("doc", Whitelisted, Ungated),
+ ("doc", Whitelisted, template!(List: "hidden|inline|...", NameValueStr: "string"), Ungated),
// FIXME: #14406 these are processed in codegen, which happens after the
// lint pass
- ("cold", Whitelisted, Ungated),
- ("naked", Whitelisted, Gated(Stability::Unstable,
+ ("cold", Whitelisted, template!(Word), Ungated),
+ ("naked", Whitelisted, template!(Word), Gated(Stability::Unstable,
"naked_functions",
"the `#[naked]` attribute \
is an experimental feature",
cfg_fn!(naked_functions))),
- ("target_feature", Whitelisted, Ungated),
- ("export_name", Whitelisted, Ungated),
- ("inline", Whitelisted, Ungated),
- ("link", Whitelisted, Ungated),
- ("link_name", Whitelisted, Ungated),
- ("link_section", Whitelisted, Ungated),
- ("no_builtins", Whitelisted, Ungated),
- ("no_mangle", Whitelisted, Ungated),
- ("no_debug", Whitelisted, Gated(
+ ("target_feature", Whitelisted, template!(List: r#"enable = "name""#), Ungated),
+ ("export_name", Whitelisted, template!(NameValueStr: "name"), Ungated),
+ ("inline", Whitelisted, template!(Word, List: "always|never"), Ungated),
+ ("link", Whitelisted, template!(List: r#"name = "...", /*opt*/ kind = "dylib|static|...",
+ /*opt*/ cfg = "...""#), Ungated),
+ ("link_name", Whitelisted, template!(NameValueStr: "name"), Ungated),
+ ("link_section", Whitelisted, template!(NameValueStr: "name"), Ungated),
+ ("no_builtins", Whitelisted, template!(Word), Ungated),
+ ("no_mangle", Whitelisted, template!(Word), Ungated),
+ ("no_debug", Whitelisted, template!(Word), Gated(
Stability::Deprecated("https://github.com/rust-lang/rust/issues/29721", None),
"no_debug",
"the `#[no_debug]` attribute was an experimental feature that has been \
deprecated due to lack of demand",
cfg_fn!(no_debug))),
- ("omit_gdb_pretty_printer_section", Whitelisted, Gated(Stability::Unstable,
+ ("omit_gdb_pretty_printer_section", Whitelisted, template!(Word), Gated(Stability::Unstable,
"omit_gdb_pretty_printer_section",
"the `#[omit_gdb_pretty_printer_section]` \
attribute is just used for the Rust test \
@@ -1077,6 +1132,7 @@
cfg_fn!(omit_gdb_pretty_printer_section))),
("unsafe_destructor_blind_to_params",
Normal,
+ template!(Word),
Gated(Stability::Deprecated("https://github.com/rust-lang/rust/issues/34761",
Some("replace this attribute with `#[may_dangle]`")),
"dropck_parametricity",
@@ -1085,93 +1141,91 @@
cfg_fn!(dropck_parametricity))),
("may_dangle",
Normal,
+ template!(Word),
Gated(Stability::Unstable,
"dropck_eyepatch",
"may_dangle has unstable semantics and may be removed in the future",
cfg_fn!(dropck_eyepatch))),
- ("unwind", Whitelisted, Gated(Stability::Unstable,
+ ("unwind", Whitelisted, template!(List: "allowed"), Gated(Stability::Unstable,
"unwind_attributes",
"#[unwind] is experimental",
cfg_fn!(unwind_attributes))),
- ("used", Whitelisted, Ungated),
+ ("used", Whitelisted, template!(Word), Ungated),
// used in resolve
- ("prelude_import", Whitelisted, Gated(Stability::Unstable,
+ ("prelude_import", Whitelisted, template!(Word), Gated(Stability::Unstable,
"prelude_import",
"`#[prelude_import]` is for use by rustc only",
cfg_fn!(prelude_import))),
// FIXME: #14407 these are only looked at on-demand so we can't
// guarantee they'll have already been checked
- ("rustc_deprecated", Whitelisted, Ungated),
- ("must_use", Whitelisted, Ungated),
- ("stable", Whitelisted, Ungated),
- ("unstable", Whitelisted, Ungated),
- ("deprecated", Normal, Ungated),
+ ("rustc_deprecated", Whitelisted, template!(List: r#"since = "version", reason = "...""#),
+ Ungated),
+ ("must_use", Whitelisted, template!(Word, NameValueStr: "reason"), Ungated),
+ ("stable", Whitelisted, template!(List: r#"feature = "name", since = "version""#), Ungated),
+ ("unstable", Whitelisted, template!(List: r#"feature = "name", reason = "...", issue = "N""#),
+ Ungated),
+ ("deprecated", Normal, template!(Word, List: r#"/*opt*/ since = "version",
+ /*opt*/ note = "reason"#,
+ NameValueStr: "reason"), Ungated),
- ("rustc_paren_sugar", Normal, Gated(Stability::Unstable,
+ ("rustc_paren_sugar", Normal, template!(Word), Gated(Stability::Unstable,
"unboxed_closures",
"unboxed_closures are still evolving",
cfg_fn!(unboxed_closures))),
- ("windows_subsystem", Whitelisted, Ungated),
+ ("windows_subsystem", Whitelisted, template!(NameValueStr: "windows|console"), Ungated),
- ("proc_macro_attribute", Normal, Ungated),
- ("proc_macro", Normal, Ungated),
+ ("proc_macro_attribute", Normal, template!(Word), Ungated),
+ ("proc_macro", Normal, template!(Word), Ungated),
- ("rustc_proc_macro_decls", Normal, Gated(Stability::Unstable,
+ ("rustc_proc_macro_decls", Normal, template!(Word), Gated(Stability::Unstable,
"rustc_proc_macro_decls",
"used internally by rustc",
cfg_fn!(rustc_attrs))),
- ("allow_fail", Normal, Gated(Stability::Unstable,
+ ("allow_fail", Normal, template!(Word), Gated(Stability::Unstable,
"allow_fail",
"allow_fail attribute is currently unstable",
cfg_fn!(allow_fail))),
- ("rustc_std_internal_symbol", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_std_internal_symbol", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"this is an internal attribute that will \
never be stable",
cfg_fn!(rustc_attrs))),
// whitelists "identity-like" conversion methods to suggest on type mismatch
- ("rustc_conversion_suggestion", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_conversion_suggestion", Whitelisted, template!(Word), Gated(Stability::Unstable,
"rustc_attrs",
"this is an internal attribute that will \
never be stable",
cfg_fn!(rustc_attrs))),
- ("rustc_args_required_const", Whitelisted, Gated(Stability::Unstable,
+ ("rustc_args_required_const", Whitelisted, template!(List: "N"), Gated(Stability::Unstable,
"rustc_attrs",
"never will be stable",
cfg_fn!(rustc_attrs))),
-
- // RFC #2093
- ("infer_static_outlives_requirements", Normal, Gated(Stability::Unstable,
- "infer_static_outlives_requirements",
- "infer 'static lifetime requirements",
- cfg_fn!(infer_static_outlives_requirements))),
-
// RFC 2070
- ("panic_handler", Normal, Ungated),
+ ("panic_handler", Normal, template!(Word), Ungated),
- ("alloc_error_handler", Normal, Gated(Stability::Unstable,
+ ("alloc_error_handler", Normal, template!(Word), Gated(Stability::Unstable,
"alloc_error_handler",
"#[alloc_error_handler] is an unstable feature",
cfg_fn!(alloc_error_handler))),
// Crate level attributes
- ("crate_name", CrateLevel, Ungated),
- ("crate_type", CrateLevel, Ungated),
- ("crate_id", CrateLevel, Ungated),
- ("feature", CrateLevel, Ungated),
- ("no_start", CrateLevel, Ungated),
- ("no_main", CrateLevel, Ungated),
- ("no_builtins", CrateLevel, Ungated),
- ("recursion_limit", CrateLevel, Ungated),
- ("type_length_limit", CrateLevel, Ungated),
- ("test_runner", CrateLevel, Gated(Stability::Unstable,
+ ("crate_name", CrateLevel, template!(NameValueStr: "name"), Ungated),
+ ("crate_type", CrateLevel, template!(NameValueStr: "bin|lib|..."), Ungated),
+ ("crate_id", CrateLevel, template!(NameValueStr: "ignored"), Ungated),
+ ("feature", CrateLevel, template!(List: "name1, name1, ..."), Ungated),
+ ("no_start", CrateLevel, template!(Word), Ungated),
+ ("no_main", CrateLevel, template!(Word), Ungated),
+ ("no_builtins", CrateLevel, template!(Word), Ungated),
+ ("recursion_limit", CrateLevel, template!(NameValueStr: "N"), Ungated),
+ ("type_length_limit", CrateLevel, template!(NameValueStr: "N"), Ungated),
+ ("test_runner", CrateLevel, template!(List: "path"), Gated(Stability::Unstable,
"custom_test_frameworks",
EXPLAIN_CUSTOM_TEST_FRAMEWORKS,
cfg_fn!(custom_test_frameworks))),
@@ -1247,7 +1301,7 @@
fn check_attribute(&self, attr: &ast::Attribute, is_macro: bool) {
debug!("check_attribute(attr = {:?})", attr);
let name = attr.name().as_str();
- for &(n, ty, ref gateage) in BUILTIN_ATTRIBUTES {
+ for &(n, ty, _template, ref gateage) in BUILTIN_ATTRIBUTES {
if name == n {
if let Gated(_, name, desc, ref has_feature) = *gateage {
gate_feature_fn!(self, has_feature, attr.span, name, desc, GateStrength::Hard);
@@ -1482,6 +1536,52 @@
Abi::System => {}
}
}
+
+ fn check_builtin_attribute(&mut self, attr: &ast::Attribute, name: &str,
+ template: AttributeTemplate) {
+ // Some special attributes like `cfg` must be checked
+ // before the generic check, so we skip them here.
+ let should_skip = |name| name == "cfg";
+ // Some of previously accepted forms were used in practice,
+ // report them as warnings for now.
+ let should_warn = |name| name == "doc" || name == "ignore" ||
+ name == "inline" || name == "link";
+
+ match attr.parse_meta(self.context.parse_sess) {
+ Ok(meta) => if !should_skip(name) && !template.compatible(&meta.node) {
+ let mut msg = "attribute must be of the form ".to_owned();
+ let mut first = true;
+ if template.word {
+ first = false;
+ msg.push_str(&format!("`#[{}{}]`", name, ""));
+ }
+ if let Some(descr) = template.list {
+ if !first {
+ msg.push_str(" or ");
+ }
+ first = false;
+ msg.push_str(&format!("`#[{}({})]`", name, descr));
+ }
+ if let Some(descr) = template.name_value_str {
+ if !first {
+ msg.push_str(" or ");
+ }
+ msg.push_str(&format!("`#[{} = \"{}\"]`", name, descr));
+ }
+ if should_warn(name) {
+ self.context.parse_sess.buffer_lint(
+ BufferedEarlyLintId::IllFormedAttributeInput,
+ meta.span,
+ ast::CRATE_NODE_ID,
+ &msg,
+ );
+ } else {
+ self.context.parse_sess.span_diagnostic.span_err(meta.span, &msg);
+ }
+ }
+ Err(mut err) => err.emit(),
+ }
+ }
}
impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
@@ -1517,12 +1617,15 @@
}
}
- if !self.context.features.unrestricted_attribute_tokens {
- // Unfortunately, `parse_meta` cannot be called speculatively
- // because it can report errors by itself, so we have to call it
- // only if the feature is disabled.
- if let Err(mut err) = attr.parse_meta(self.context.parse_sess) {
- err.help("try enabling `#![feature(unrestricted_attribute_tokens)]`").emit()
+ match BUILTIN_ATTRIBUTES.iter().find(|(name, ..)| attr.path == name) {
+ Some(&(name, _, template, _)) => self.check_builtin_attribute(attr, name, template),
+ None => if !self.context.features.unrestricted_attribute_tokens {
+ // Unfortunately, `parse_meta` cannot be called speculatively
+ // because it can report errors by itself, so we have to call it
+ // only if the feature is disabled.
+ if let Err(mut err) = attr.parse_meta(self.context.parse_sess) {
+ err.help("try enabling `#![feature(unrestricted_attribute_tokens)]`").emit()
+ }
}
}
}
@@ -1926,11 +2029,7 @@
let list = match attr.meta_item_list() {
Some(list) => list,
- None => {
- span_err!(span_handler, attr.span, E0555,
- "malformed feature attribute, expected #![feature(...)]");
- continue
- }
+ None => continue,
};
for mi in list {
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index 8ac1038..a4c3b38 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -598,7 +598,7 @@
TokenTree::Delimited(span, delim, tts) => TokenTree::Delimited(
DelimSpan::from_pair(fld.new_span(span.open), fld.new_span(span.close)),
delim,
- fld.fold_tts(tts.stream()).into(),
+ fld.fold_tts(tts).into(),
),
}
}
diff --git a/src/libsyntax/json.rs b/src/libsyntax/json.rs
index ea0fe71..cf11ac5 100644
--- a/src/libsyntax/json.rs
+++ b/src/libsyntax/json.rs
@@ -7,7 +7,7 @@
//! The format of the JSON output should be considered *unstable*. For now the
//! structs at the end of this file (Diagnostic*) specify the error format.
-// FIXME spec the JSON output properly.
+// FIXME: spec the JSON output properly.
use source_map::{SourceMap, FilePathMapping};
use syntax_pos::{self, MacroBacktrace, Span, SpanLabel, MultiSpan};
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index ea943e1..df22dac 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -10,6 +10,7 @@
test(attr(deny(warnings))))]
#![feature(crate_visibility_modifier)]
+#![feature(label_break_value)]
#![feature(nll)]
#![feature(rustc_attrs)]
#![feature(rustc_diagnostic_macros)]
diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs
index ea20553..ddb350f 100644
--- a/src/libsyntax/parse/mod.rs
+++ b/src/libsyntax/parse/mod.rs
@@ -817,7 +817,7 @@
)
if name_macro_rules.name == "macro_rules"
&& name_zip.name == "zip" => {
- let tts = ¯o_tts.stream().trees().collect::<Vec<_>>();
+ let tts = ¯o_tts.trees().collect::<Vec<_>>();
match (tts.len(), tts.get(0), tts.get(1), tts.get(2)) {
(
3,
@@ -826,7 +826,7 @@
Some(&TokenTree::Delimited(_, second_delim, ref second_tts)),
)
if macro_delim == token::Paren => {
- let tts = &first_tts.stream().trees().collect::<Vec<_>>();
+ let tts = &first_tts.trees().collect::<Vec<_>>();
match (tts.len(), tts.get(0), tts.get(1)) {
(
2,
@@ -836,7 +836,7 @@
if first_delim == token::Paren && ident.name == "a" => {},
_ => panic!("value 3: {:?} {:?}", first_delim, first_tts),
}
- let tts = &second_tts.stream().trees().collect::<Vec<_>>();
+ let tts = &second_tts.trees().collect::<Vec<_>>();
match (tts.len(), tts.get(0), tts.get(1)) {
(
2,
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 4f1bc2f..7e15b231 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -46,7 +46,7 @@
use ptr::P;
use parse::PResult;
use ThinVec;
-use tokenstream::{self, DelimSpan, ThinTokenStream, TokenTree, TokenStream};
+use tokenstream::{self, DelimSpan, TokenTree, TokenStream, TreeAndJoint};
use symbol::{Symbol, keywords};
use std::borrow::Cow;
@@ -280,17 +280,17 @@
/// on the parser.
#[derive(Clone)]
enum LastToken {
- Collecting(Vec<TokenStream>),
- Was(Option<TokenStream>),
+ Collecting(Vec<TreeAndJoint>),
+ Was(Option<TreeAndJoint>),
}
impl TokenCursorFrame {
- fn new(sp: DelimSpan, delim: DelimToken, tts: &ThinTokenStream) -> Self {
+ fn new(sp: DelimSpan, delim: DelimToken, tts: &TokenStream) -> Self {
TokenCursorFrame {
delim: delim,
span: sp,
open_delim: delim == token::NoDelim,
- tree_cursor: tts.stream().into_trees(),
+ tree_cursor: tts.clone().into_trees(),
close_delim: delim == token::NoDelim,
last_token: LastToken::Was(None),
}
@@ -2330,7 +2330,7 @@
})
}
- fn expect_delimited_token_tree(&mut self) -> PResult<'a, (MacDelimiter, ThinTokenStream)> {
+ fn expect_delimited_token_tree(&mut self) -> PResult<'a, (MacDelimiter, TokenStream)> {
let delim = match self.token {
token::OpenDelim(delim) => delim,
_ => {
@@ -2350,7 +2350,7 @@
token::Brace => MacDelimiter::Brace,
token::NoDelim => self.bug("unexpected no delimiter"),
};
- Ok((delim, tts.stream().into()))
+ Ok((delim, tts.into()))
}
/// At the bottom (top?) of the precedence hierarchy,
@@ -4642,7 +4642,7 @@
let ident = self.parse_ident()?;
let tokens = if self.check(&token::OpenDelim(token::Brace)) {
match self.parse_token_tree() {
- TokenTree::Delimited(_, _, tts) => tts.stream(),
+ TokenTree::Delimited(_, _, tts) => tts,
_ => unreachable!(),
}
} else if self.check(&token::OpenDelim(token::Paren)) {
@@ -5235,22 +5235,13 @@
kind: ast::GenericParamKind::Lifetime,
});
if let Some(sp) = seen_ty_param {
- let param_span = self.prev_span;
- let ate_comma = self.eat(&token::Comma);
- let remove_sp = if ate_comma {
- param_span.until(self.span)
- } else {
- last_comma_span.unwrap_or(param_span).to(param_span)
- };
- bad_lifetime_pos.push(param_span);
-
- if let Ok(snippet) = self.sess.source_map().span_to_snippet(param_span) {
+ let remove_sp = last_comma_span.unwrap_or(self.prev_span).to(self.prev_span);
+ bad_lifetime_pos.push(self.prev_span);
+ if let Ok(snippet) = self.sess.source_map().span_to_snippet(self.prev_span) {
suggestions.push((remove_sp, String::new()));
- suggestions.push((sp.shrink_to_lo(), format!("{}, ", snippet)));
- }
- if ate_comma {
- last_comma_span = Some(self.prev_span);
- continue
+ suggestions.push((
+ sp.shrink_to_lo(),
+ format!("{}, ", snippet)));
}
}
} else if self.check_ident() {
@@ -7771,7 +7762,7 @@
&mut self.token_cursor.stack[prev].last_token
};
- // Pull our the toekns that we've collected from the call to `f` above
+ // Pull out the tokens that we've collected from the call to `f` above.
let mut collected_tokens = match *last_token {
LastToken::Collecting(ref mut v) => mem::replace(v, Vec::new()),
LastToken::Was(_) => panic!("our vector went away?"),
@@ -7790,10 +7781,9 @@
// call. In that case we need to record all the tokens we collected in
// our parent list as well. To do that we push a clone of our stream
// onto the previous list.
- let stream = collected_tokens.into_iter().collect::<TokenStream>();
match prev_collecting {
Some(mut list) => {
- list.push(stream.clone());
+ list.extend(collected_tokens.iter().cloned());
list.extend(extra_token);
*last_token = LastToken::Collecting(list);
}
@@ -7802,7 +7792,7 @@
}
}
- Ok((ret?, stream))
+ Ok((ret?, TokenStream::new(collected_tokens)))
}
pub fn parse_item(&mut self) -> PResult<'a, Option<P<Item>>> {
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 2ad3d3a..c535940 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -807,7 +807,7 @@
TokenTree::Delimited(_, delim, tts) => {
self.writer().word(token_to_string(&token::OpenDelim(delim)))?;
self.writer().space()?;
- self.print_tts(tts.stream())?;
+ self.print_tts(tts)?;
self.writer().space()?;
self.writer().word(token_to_string(&token::CloseDelim(delim)))
},
diff --git a/src/libsyntax/test.rs b/src/libsyntax/test.rs
index 884c4fd..b352486 100644
--- a/src/libsyntax/test.rs
+++ b/src/libsyntax/test.rs
@@ -428,14 +428,11 @@
fn get_test_runner(sd: &errors::Handler, krate: &ast::Crate) -> Option<ast::Path> {
let test_attr = attr::find_by_name(&krate.attrs, "test_runner")?;
- if let Some(meta_list) = test_attr.meta_item_list() {
+ test_attr.meta_item_list().map(|meta_list| {
if meta_list.len() != 1 {
sd.span_fatal(test_attr.span(),
"#![test_runner(..)] accepts exactly 1 argument").raise()
}
- Some(meta_list[0].word().as_ref().unwrap().ident.clone())
- } else {
- sd.span_fatal(test_attr.span(),
- "test_runner must be of the form #[test_runner(..)]").raise()
- }
+ meta_list[0].word().as_ref().unwrap().ident.clone()
+ })
}
diff --git a/src/libsyntax/tokenstream.rs b/src/libsyntax/tokenstream.rs
index fb72ef9..f5d2d6f 100644
--- a/src/libsyntax/tokenstream.rs
+++ b/src/libsyntax/tokenstream.rs
@@ -41,7 +41,7 @@
/// A single token
Token(Span, token::Token),
/// A delimited sequence of token trees
- Delimited(DelimSpan, DelimToken, ThinTokenStream),
+ Delimited(DelimSpan, DelimToken, TokenStream),
}
impl TokenTree {
@@ -62,8 +62,7 @@
(&TokenTree::Token(_, ref tk), &TokenTree::Token(_, ref tk2)) => tk == tk2,
(&TokenTree::Delimited(_, delim, ref tts),
&TokenTree::Delimited(_, delim2, ref tts2)) => {
- delim == delim2 &&
- tts.stream().eq_unspanned(&tts2.stream())
+ delim == delim2 && tts.eq_unspanned(&tts2)
}
(_, _) => false,
}
@@ -81,8 +80,7 @@
}
(&TokenTree::Delimited(_, delim, ref tts),
&TokenTree::Delimited(_, delim2, ref tts2)) => {
- delim == delim2 &&
- tts.stream().probably_equal_for_proc_macro(&tts2.stream())
+ delim == delim2 && tts.probably_equal_for_proc_macro(&tts2)
}
(_, _) => false,
}
@@ -113,7 +111,7 @@
}
pub fn joint(self) -> TokenStream {
- TokenStream::Tree(self, Joint)
+ TokenStream::new(vec![(self, Joint)])
}
/// Returns the opening delimiter as a token tree.
@@ -143,18 +141,19 @@
/// The goal is for procedural macros to work with `TokenStream`s and `TokenTree`s
/// instead of a representation of the abstract syntax tree.
/// Today's `TokenTree`s can still contain AST via `Token::Interpolated` for back-compat.
+///
+/// The use of `Option` is an optimization that avoids the need for an
+/// allocation when the stream is empty. However, it is not guaranteed that an
+/// empty stream is represented with `None`; it may be represented as a `Some`
+/// around an empty `Vec`.
#[derive(Clone, Debug)]
-pub enum TokenStream {
- Empty,
- Tree(TokenTree, IsJoint),
- Stream(Lrc<Vec<TreeAndJoint>>),
-}
+pub struct TokenStream(Option<Lrc<Vec<TreeAndJoint>>>);
pub type TreeAndJoint = (TokenTree, IsJoint);
// `TokenStream` is used a lot. Make sure it doesn't unintentionally get bigger.
#[cfg(target_arch = "x86_64")]
-static_assert!(MEM_SIZE_OF_TOKEN_STREAM: mem::size_of::<TokenStream>() == 32);
+static_assert!(MEM_SIZE_OF_TOKEN_STREAM: mem::size_of::<TokenStream>() == 8);
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum IsJoint {
@@ -169,7 +168,7 @@
/// separating the two arguments with a comma for diagnostic suggestions.
pub(crate) fn add_comma(&self) -> Option<(TokenStream, Span)> {
// Used to suggest if a user writes `foo!(a b);`
- if let TokenStream::Stream(ref stream) = self {
+ if let Some(ref stream) = self.0 {
let mut suggestion = None;
let mut iter = stream.iter().enumerate().peekable();
while let Some((pos, ts)) = iter.next() {
@@ -201,7 +200,7 @@
impl From<TokenTree> for TokenStream {
fn from(tree: TokenTree) -> TokenStream {
- TokenStream::Tree(tree, NonJoint)
+ TokenStream::new(vec![(tree, NonJoint)])
}
}
@@ -233,7 +232,7 @@
impl TokenStream {
pub fn len(&self) -> usize {
- if let TokenStream::Stream(ref slice) = self {
+ if let Some(ref slice) = self.0 {
slice.len()
} else {
0
@@ -241,13 +240,13 @@
}
pub fn empty() -> TokenStream {
- TokenStream::Empty
+ TokenStream(None)
}
pub fn is_empty(&self) -> bool {
- match self {
- TokenStream::Empty => true,
- _ => false,
+ match self.0 {
+ None => true,
+ Some(ref stream) => stream.is_empty(),
}
}
@@ -258,10 +257,9 @@
_ => {
let mut vec = vec![];
for stream in streams {
- match stream {
- TokenStream::Empty => {},
- TokenStream::Tree(tree, is_joint) => vec.push((tree, is_joint)),
- TokenStream::Stream(stream2) => vec.extend(stream2.iter().cloned()),
+ match stream.0 {
+ None => {},
+ Some(stream2) => vec.extend(stream2.iter().cloned()),
}
}
TokenStream::new(vec)
@@ -269,22 +267,16 @@
}
}
- pub fn new(mut streams: Vec<TreeAndJoint>) -> TokenStream {
+ pub fn new(streams: Vec<TreeAndJoint>) -> TokenStream {
match streams.len() {
- 0 => TokenStream::empty(),
- 1 => {
- let (tree, is_joint) = streams.pop().unwrap();
- TokenStream::Tree(tree, is_joint)
- }
- _ => TokenStream::Stream(Lrc::new(streams)),
+ 0 => TokenStream(None),
+ _ => TokenStream(Some(Lrc::new(streams))),
}
}
pub fn append_to_tree_and_joint_vec(self, vec: &mut Vec<TreeAndJoint>) {
- match self {
- TokenStream::Empty => {}
- TokenStream::Tree(tree, is_joint) => vec.push((tree, is_joint)),
- TokenStream::Stream(stream) => vec.extend(stream.iter().cloned()),
+ if let Some(stream) = self.0 {
+ vec.extend(stream.iter().cloned());
}
}
@@ -349,51 +341,36 @@
}
pub fn map_enumerated<F: FnMut(usize, TokenTree) -> TokenTree>(self, mut f: F) -> TokenStream {
- match self {
- TokenStream::Empty => TokenStream::Empty,
- TokenStream::Tree(tree, is_joint) => TokenStream::Tree(f(0, tree), is_joint),
- TokenStream::Stream(stream) => TokenStream::Stream(Lrc::new(
+ TokenStream(self.0.map(|stream| {
+ Lrc::new(
stream
.iter()
.enumerate()
.map(|(i, (tree, is_joint))| (f(i, tree.clone()), *is_joint))
- .collect()
- )),
- }
+ .collect())
+ }))
}
pub fn map<F: FnMut(TokenTree) -> TokenTree>(self, mut f: F) -> TokenStream {
- match self {
- TokenStream::Empty => TokenStream::Empty,
- TokenStream::Tree(tree, is_joint) => TokenStream::Tree(f(tree), is_joint),
- TokenStream::Stream(stream) => TokenStream::Stream(Lrc::new(
+ TokenStream(self.0.map(|stream| {
+ Lrc::new(
stream
.iter()
.map(|(tree, is_joint)| (f(tree.clone()), *is_joint))
- .collect()
- )),
- }
+ .collect())
+ }))
}
- fn first_tree_and_joint(&self) -> Option<(TokenTree, IsJoint)> {
- match self {
- TokenStream::Empty => None,
- TokenStream::Tree(ref tree, is_joint) => Some((tree.clone(), *is_joint)),
- TokenStream::Stream(ref stream) => Some(stream.first().unwrap().clone())
- }
+ fn first_tree_and_joint(&self) -> Option<TreeAndJoint> {
+ self.0.as_ref().map(|stream| {
+ stream.first().unwrap().clone()
+ })
}
fn last_tree_if_joint(&self) -> Option<TokenTree> {
- match self {
- TokenStream::Empty => None,
- TokenStream::Tree(ref tree, is_joint) => {
- if *is_joint == Joint {
- Some(tree.clone())
- } else {
- None
- }
- }
- TokenStream::Stream(ref stream) => {
+ match self.0 {
+ None => None,
+ Some(ref stream) => {
if let (tree, Joint) = stream.last().unwrap() {
Some(tree.clone())
} else {
@@ -422,7 +399,7 @@
self.push_all_but_last_tree(&last_stream);
let glued_span = last_span.to(span);
let glued_tt = TokenTree::Token(glued_span, glued_tok);
- let glued_tokenstream = TokenStream::Tree(glued_tt, is_joint);
+ let glued_tokenstream = TokenStream::new(vec![(glued_tt, is_joint)]);
self.0.push(glued_tokenstream);
self.push_all_but_first_tree(&stream);
return
@@ -437,23 +414,21 @@
}
fn push_all_but_last_tree(&mut self, stream: &TokenStream) {
- if let TokenStream::Stream(ref streams) = stream {
+ if let Some(ref streams) = stream.0 {
let len = streams.len();
match len {
1 => {}
- 2 => self.0.push(TokenStream::Tree(streams[0].0.clone(), streams[0].1)),
- _ => self.0.push(TokenStream::Stream(Lrc::new(streams[0 .. len - 1].to_vec()))),
+ _ => self.0.push(TokenStream(Some(Lrc::new(streams[0 .. len - 1].to_vec())))),
}
}
}
fn push_all_but_first_tree(&mut self, stream: &TokenStream) {
- if let TokenStream::Stream(ref streams) = stream {
+ if let Some(ref streams) = stream.0 {
let len = streams.len();
match len {
1 => {}
- 2 => self.0.push(TokenStream::Tree(streams[1].0.clone(), streams[1].1)),
- _ => self.0.push(TokenStream::Stream(Lrc::new(streams[1 .. len].to_vec()))),
+ _ => self.0.push(TokenStream(Some(Lrc::new(streams[1 .. len].to_vec())))),
}
}
}
@@ -479,17 +454,9 @@
}
pub fn next_with_joint(&mut self) -> Option<TreeAndJoint> {
- match self.stream {
- TokenStream::Empty => None,
- TokenStream::Tree(ref tree, ref is_joint) => {
- if self.index == 0 {
- self.index = 1;
- Some((tree.clone(), *is_joint))
- } else {
- None
- }
- }
- TokenStream::Stream(ref stream) => {
+ match self.stream.0 {
+ None => None,
+ Some(ref stream) => {
if self.index < stream.len() {
self.index += 1;
Some(stream[self.index - 1].clone())
@@ -505,63 +472,19 @@
return;
}
let index = self.index;
- let stream = mem::replace(&mut self.stream, TokenStream::Empty);
+ let stream = mem::replace(&mut self.stream, TokenStream(None));
*self = TokenStream::from_streams(vec![stream, new_stream]).into_trees();
self.index = index;
}
pub fn look_ahead(&self, n: usize) -> Option<TokenTree> {
- match self.stream {
- TokenStream::Empty => None,
- TokenStream::Tree(ref tree, _) => {
- if n == 0 && self.index == 0 {
- Some(tree.clone())
- } else {
- None
- }
- }
- TokenStream::Stream(ref stream) =>
- stream[self.index ..].get(n).map(|(tree, _)| tree.clone()),
+ match self.stream.0 {
+ None => None,
+ Some(ref stream) => stream[self.index ..].get(n).map(|(tree, _)| tree.clone()),
}
}
}
-/// The `TokenStream` type is large enough to represent a single `TokenTree` without allocation.
-/// `ThinTokenStream` is smaller, but needs to allocate to represent a single `TokenTree`.
-/// We must use `ThinTokenStream` in `TokenTree::Delimited` to avoid infinite size due to recursion.
-#[derive(Debug, Clone)]
-pub struct ThinTokenStream(Option<Lrc<Vec<TreeAndJoint>>>);
-
-impl ThinTokenStream {
- pub fn stream(&self) -> TokenStream {
- self.clone().into()
- }
-}
-
-impl From<TokenStream> for ThinTokenStream {
- fn from(stream: TokenStream) -> ThinTokenStream {
- ThinTokenStream(match stream {
- TokenStream::Empty => None,
- TokenStream::Tree(tree, is_joint) => Some(Lrc::new(vec![(tree, is_joint)])),
- TokenStream::Stream(stream) => Some(stream),
- })
- }
-}
-
-impl From<ThinTokenStream> for TokenStream {
- fn from(stream: ThinTokenStream) -> TokenStream {
- stream.0.map(TokenStream::Stream).unwrap_or_else(TokenStream::empty)
- }
-}
-
-impl Eq for ThinTokenStream {}
-
-impl PartialEq<ThinTokenStream> for ThinTokenStream {
- fn eq(&self, other: &ThinTokenStream) -> bool {
- TokenStream::from(self.clone()) == TokenStream::from(other.clone())
- }
-}
-
impl fmt::Display for TokenStream {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(&pprust::tokens_to_string(self.clone()))
@@ -580,18 +503,6 @@
}
}
-impl Encodable for ThinTokenStream {
- fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), E::Error> {
- TokenStream::from(self.clone()).encode(encoder)
- }
-}
-
-impl Decodable for ThinTokenStream {
- fn decode<D: Decoder>(decoder: &mut D) -> Result<ThinTokenStream, D::Error> {
- TokenStream::decode(decoder).map(Into::into)
- }
-}
-
#[derive(Debug, Copy, Clone, PartialEq, RustcEncodable, RustcDecodable)]
pub struct DelimSpan {
pub open: Span,
diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs
index 156546b..8cbd47c 100644
--- a/src/libsyntax/visit.rs
+++ b/src/libsyntax/visit.rs
@@ -832,7 +832,7 @@
pub fn walk_tt<'a, V: Visitor<'a>>(visitor: &mut V, tt: TokenTree) {
match tt {
TokenTree::Token(_, tok) => visitor.visit_token(tok),
- TokenTree::Delimited(_, _, tts) => visitor.visit_tts(tts.stream()),
+ TokenTree::Delimited(_, _, tts) => visitor.visit_tts(tts),
}
}
diff --git a/src/libsyntax_ext/proc_macro_decls.rs b/src/libsyntax_ext/proc_macro_decls.rs
index 38f7ca5..1d27271 100644
--- a/src/libsyntax_ext/proc_macro_decls.rs
+++ b/src/libsyntax_ext/proc_macro_decls.rs
@@ -105,12 +105,7 @@
// `#[proc_macro_derive(Foo, attributes(A, ..))]`
let list = match attr.meta_item_list() {
Some(list) => list,
- None => {
- self.handler.span_err(attr.span(),
- "attribute must be of form: \
- #[proc_macro_derive(TraitName)]");
- return
- }
+ None => return,
};
if list.len() != 1 && list.len() != 2 {
self.handler.span_err(attr.span(),
@@ -182,13 +177,7 @@
}
}
- fn collect_attr_proc_macro(&mut self, item: &'a ast::Item, attr: &'a ast::Attribute) {
- if !attr.is_word() {
- self.handler.span_err(attr.span, "`#[proc_macro_attribute]` attribute \
- does not take any arguments");
- return;
- }
-
+ fn collect_attr_proc_macro(&mut self, item: &'a ast::Item) {
if self.in_root && item.vis.node.is_pub() {
self.attr_macros.push(ProcMacroDef {
span: item.span,
@@ -205,13 +194,7 @@
}
}
- fn collect_bang_proc_macro(&mut self, item: &'a ast::Item, attr: &'a ast::Attribute) {
- if !attr.is_word() {
- self.handler.span_err(attr.span, "`#[proc_macro]` attribute \
- does not take any arguments");
- return;
- }
-
+ fn collect_bang_proc_macro(&mut self, item: &'a ast::Item) {
if self.in_root && item.vis.node.is_pub() {
self.bang_macros.push(ProcMacroDef {
span: item.span,
@@ -308,9 +291,9 @@
if attr.check_name("proc_macro_derive") {
self.collect_custom_derive(item, attr);
} else if attr.check_name("proc_macro_attribute") {
- self.collect_attr_proc_macro(item, attr);
+ self.collect_attr_proc_macro(item);
} else if attr.check_name("proc_macro") {
- self.collect_bang_proc_macro(item, attr);
+ self.collect_bang_proc_macro(item);
};
let prev_in_root = mem::replace(&mut self.in_root, false);
diff --git a/src/libsyntax_ext/proc_macro_server.rs b/src/libsyntax_ext/proc_macro_server.rs
index 158cbc7..7de9b93 100644
--- a/src/libsyntax_ext/proc_macro_server.rs
+++ b/src/libsyntax_ext/proc_macro_server.rs
@@ -269,7 +269,7 @@
};
let tree = tokenstream::TokenTree::Token(span, token);
- TokenStream::Tree(tree, if joint { Joint } else { NonJoint })
+ TokenStream::new(vec![(tree, if joint { Joint } else { NonJoint })])
}
}
diff --git a/src/libsyntax_ext/test.rs b/src/libsyntax_ext/test.rs
index a19d045..11c734b 100644
--- a/src/libsyntax_ext/test.rs
+++ b/src/libsyntax_ext/test.rs
@@ -214,20 +214,8 @@
match attr::find_by_name(&i.attrs, "should_panic") {
Some(attr) => {
let ref sd = cx.parse_sess.span_diagnostic;
- if attr.is_value_str() {
- sd.struct_span_warn(
- attr.span(),
- "attribute must be of the form: \
- `#[should_panic]` or \
- `#[should_panic(expected = \"error message\")]`"
- ).note("Errors in this attribute were erroneously allowed \
- and will become a hard error in a future release.")
- .emit();
- return ShouldPanic::Yes(None);
- }
+
match attr.meta_item_list() {
- // Handle #[should_panic]
- None => ShouldPanic::Yes(None),
// Handle #[should_panic(expected = "foo")]
Some(list) => {
let msg = list.iter()
@@ -247,6 +235,8 @@
ShouldPanic::Yes(msg)
}
},
+ // Handle #[should_panic] and #[should_panic = "expected"]
+ None => ShouldPanic::Yes(attr.value_str())
}
}
None => ShouldPanic::No,
diff --git a/src/libterm/terminfo/searcher.rs b/src/libterm/terminfo/searcher.rs
index d48e189..a9e2626 100644
--- a/src/libterm/terminfo/searcher.rs
+++ b/src/libterm/terminfo/searcher.rs
@@ -66,7 +66,7 @@
}
#[test]
-#[ignore(reason = "buildbots don't have ncurses installed and I can't mock everything I need")]
+#[ignore = "buildbots don't have ncurses installed and I can't mock everything I need"]
fn test_get_dbpath_for_term() {
// woefully inadequate test coverage
// note: current tests won't work with non-standard terminfo hierarchies (e.g., macOS's)
diff --git a/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs b/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
index efef4ab..bca1d7a 100644
--- a/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
+++ b/src/test/compile-fail-fulldeps/auxiliary/lint_group_plugin_test.rs
@@ -1,13 +1,3 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
// force-host
#![feature(plugin_registrar)]
diff --git a/src/test/incremental/change_name_of_static_in_fn.rs b/src/test/incremental/change_name_of_static_in_fn.rs
new file mode 100644
index 0000000..5b27b68
--- /dev/null
+++ b/src/test/incremental/change_name_of_static_in_fn.rs
@@ -0,0 +1,17 @@
+
+// revisions:rpass1 rpass2 rpass3
+
+// See issue #57692.
+
+#![allow(warnings)]
+
+fn main() {
+ #[cfg(rpass1)]
+ {
+ static map: u64 = 0;
+ }
+ #[cfg(not(rpass1))]
+ {
+ static MAP: u64 = 0;
+ }
+}
diff --git a/src/test/run-pass/binding/fn-arg-incomplete-pattern-drop-order.rs b/src/test/run-pass/binding/fn-arg-incomplete-pattern-drop-order.rs
new file mode 100644
index 0000000..4d5a6fb
--- /dev/null
+++ b/src/test/run-pass/binding/fn-arg-incomplete-pattern-drop-order.rs
@@ -0,0 +1,68 @@
+// Check that partially moved from function parameters are dropped after the
+// named bindings that move from them.
+
+// ignore-wasm32-bare compiled with panic=abort by default
+
+use std::{panic, cell::RefCell};
+
+struct LogDrop<'a>(i32, Context<'a>);
+
+#[derive(Copy, Clone)]
+struct Context<'a> {
+ panic_on: i32,
+ drops: &'a RefCell<Vec<i32>>,
+}
+
+impl<'a> Context<'a> {
+ fn record_drop(self, index: i32) {
+ self.drops.borrow_mut().push(index);
+ if index == self.panic_on {
+ panic!();
+ }
+ }
+}
+
+impl<'a> Drop for LogDrop<'a> {
+ fn drop(&mut self) {
+ self.1.record_drop(self.0);
+ }
+}
+
+fn bindings_in_params((_x, _): (LogDrop, LogDrop), (_, _y): (LogDrop, LogDrop)) {}
+fn bindings_with_let(a: (LogDrop, LogDrop), b: (LogDrop, LogDrop)) {
+ // Drop order in foo is the same as the following bindings.
+ // _temp2 is declared after _x to avoid a difference between `_: T` and
+ // `x: T` in function parameters.
+ let _temp1 = a;
+ let (_x, _) = _temp1;
+
+ let _temp2 = b;
+ let (_, _y) = _temp2;
+}
+
+fn test_drop_order(panic_on: i32, fun: fn((LogDrop, LogDrop), (LogDrop, LogDrop))) {
+ let context = Context {
+ panic_on,
+ drops: &RefCell::new(Vec::new()),
+ };
+ let one = LogDrop(1, context);
+ let two = LogDrop(2, context);
+ let three = LogDrop(3, context);
+ let four = LogDrop(4, context);
+
+ let res = panic::catch_unwind(panic::AssertUnwindSafe(|| {
+ fun((three, four), (two, one));
+ }));
+ if panic_on == 0 {
+ assert!(res.is_ok(), "should not have panicked");
+ } else {
+ assert!(res.is_err(), "should have panicked");
+ }
+ assert_eq!(*context.drops.borrow(), [1, 2, 3, 4], "incorrect drop order");
+}
+
+fn main() {
+ (0..=4).for_each(|i| test_drop_order(i, bindings_in_params));
+ (0..=4).for_each(|i| test_drop_order(i, bindings_with_let));
+ (0..=4).for_each(|i| test_drop_order(i, |(_x, _), (_, _y)| {}));
+}
diff --git a/src/test/run-pass/simd/simd-upgraded.rs b/src/test/run-pass/simd/simd-upgraded.rs
deleted file mode 100644
index afba298..0000000
--- a/src/test/run-pass/simd/simd-upgraded.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-// run-pass
-#![allow(stable_features)]
-#![allow(non_camel_case_types)]
-
-// Test that removed LLVM SIMD intrinsics continue
-// to work via the "AutoUpgrade" mechanism.
-
-#![feature(cfg_target_feature, repr_simd)]
-#![feature(platform_intrinsics, stmt_expr_attributes)]
-
-#[repr(simd)]
-#[derive(PartialEq, Debug)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-fn main() {
- #[cfg(target_feature = "sse2")] unsafe {
- extern "platform-intrinsic" {
- fn x86_mm_min_epi16(x: i16x8, y: i16x8) -> i16x8;
- }
- assert_eq!(x86_mm_min_epi16(i16x8(0, 1, 2, 3, 4, 5, 6, 7),
- i16x8(7, 6, 5, 4, 3, 2, 1, 0)),
- i16x8(0, 1, 2, 3, 3, 2, 1, 0));
- };
-}
diff --git a/src/test/run-pass/weird-exprs.rs b/src/test/run-pass/weird-exprs.rs
index 6d0c5c1..7ce7e29 100644
--- a/src/test/run-pass/weird-exprs.rs
+++ b/src/test/run-pass/weird-exprs.rs
@@ -4,7 +4,7 @@
#![allow(unused_parens)]
// compile-flags: -Z borrowck=compare
-#![recursion_limit = "128"]
+#![recursion_limit = "256"]
use std::cell::Cell;
use std::mem::swap;
diff --git a/src/test/rustdoc-ui/deny-missing-docs-crate.rs b/src/test/rustdoc-ui/deny-missing-docs-crate.rs
index 910c993..b74eba3 100644
--- a/src/test/rustdoc-ui/deny-missing-docs-crate.rs
+++ b/src/test/rustdoc-ui/deny-missing-docs-crate.rs
@@ -1,13 +1,3 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
#![deny(missing_docs)] //~ ERROR
pub struct Foo; //~ ERROR
diff --git a/src/test/rustdoc-ui/deny-missing-docs-crate.stderr b/src/test/rustdoc-ui/deny-missing-docs-crate.stderr
index 7f0590e..1cfd609 100644
--- a/src/test/rustdoc-ui/deny-missing-docs-crate.stderr
+++ b/src/test/rustdoc-ui/deny-missing-docs-crate.stderr
@@ -1,5 +1,5 @@
error: missing documentation for crate
- --> $DIR/deny-missing-docs-crate.rs:11:1
+ --> $DIR/deny-missing-docs-crate.rs:1:1
|
LL | / #![deny(missing_docs)] //~ ERROR
LL | |
@@ -7,13 +7,13 @@
| |_______________^
|
note: lint level defined here
- --> $DIR/deny-missing-docs-crate.rs:11:9
+ --> $DIR/deny-missing-docs-crate.rs:1:9
|
LL | #![deny(missing_docs)] //~ ERROR
| ^^^^^^^^^^^^
error: missing documentation for a struct
- --> $DIR/deny-missing-docs-crate.rs:13:1
+ --> $DIR/deny-missing-docs-crate.rs:3:1
|
LL | pub struct Foo; //~ ERROR
| ^^^^^^^^^^^^^^^
diff --git a/src/test/rustdoc-ui/deny-missing-docs-macro.rs b/src/test/rustdoc-ui/deny-missing-docs-macro.rs
index a12fe17..b1c1253 100644
--- a/src/test/rustdoc-ui/deny-missing-docs-macro.rs
+++ b/src/test/rustdoc-ui/deny-missing-docs-macro.rs
@@ -1,13 +1,3 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
//! foo
#![deny(missing_docs)]
diff --git a/src/test/rustdoc-ui/deny-missing-docs-macro.stderr b/src/test/rustdoc-ui/deny-missing-docs-macro.stderr
index 686a450..b87e60d 100644
--- a/src/test/rustdoc-ui/deny-missing-docs-macro.stderr
+++ b/src/test/rustdoc-ui/deny-missing-docs-macro.stderr
@@ -1,11 +1,11 @@
error: missing documentation for macro
- --> $DIR/deny-missing-docs-macro.rs:16:1
+ --> $DIR/deny-missing-docs-macro.rs:6:1
|
LL | macro_rules! foo { //~ ERROR
| ^^^^^^^^^^^^^^^^
|
note: lint level defined here
- --> $DIR/deny-missing-docs-macro.rs:13:9
+ --> $DIR/deny-missing-docs-macro.rs:3:9
|
LL | #![deny(missing_docs)]
| ^^^^^^^^^^^^
diff --git a/src/test/rustdoc-ui/failed-doctest-output.stdout b/src/test/rustdoc-ui/failed-doctest-output.stdout
index 9fd46e9..8af05e9 100644
--- a/src/test/rustdoc-ui/failed-doctest-output.stdout
+++ b/src/test/rustdoc-ui/failed-doctest-output.stdout
@@ -12,7 +12,7 @@
3 | no
| ^^ not found in this scope
-thread '$DIR/failed-doctest-output.rs - OtherStruct (line 17)' panicked at 'couldn't compile the test', src/librustdoc/test.rs:321:13
+thread '$DIR/failed-doctest-output.rs - OtherStruct (line 17)' panicked at 'couldn't compile the test', src/librustdoc/test.rs:354:13
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
---- $DIR/failed-doctest-output.rs - SomeStruct (line 11) stdout ----
@@ -21,7 +21,7 @@
thread 'main' panicked at 'oh no', $DIR/failed-doctest-output.rs:3:1
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
-', src/librustdoc/test.rs:356:17
+', src/librustdoc/test.rs:389:17
failures:
diff --git a/src/test/rustdoc/auxiliary/enum_primitive.rs b/src/test/rustdoc/auxiliary/enum_primitive.rs
index c265ae4..eff47e8 100644
--- a/src/test/rustdoc/auxiliary/enum_primitive.rs
+++ b/src/test/rustdoc/auxiliary/enum_primitive.rs
@@ -19,7 +19,6 @@
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
//! This crate exports a macro `enum_from_primitive!` that wraps an
//! `enum` declaration and automatically adds an implementation of
//! `num::FromPrimitive` (reexported here), to allow conversion from
@@ -52,7 +51,6 @@
//! }
//! ```
-
pub mod num_traits {
pub trait FromPrimitive: Sized {
fn from_i64(n: i64) -> Option<Self>;
@@ -207,4 +205,3 @@
enum_from_primitive_impl! { $name, $( $( $variant )+ )+ }
};
}
-
diff --git a/src/test/rustdoc/issue-56701.rs b/src/test/rustdoc/issue-56701.rs
new file mode 100644
index 0000000..6fb30a4
--- /dev/null
+++ b/src/test/rustdoc/issue-56701.rs
@@ -0,0 +1,34 @@
+// This shouldn't cause a stack overflow when rustdoc is run
+
+use std::ops::Deref;
+use std::ops::DerefMut;
+
+pub trait SimpleTrait {
+ type SimpleT;
+}
+
+impl<Inner: SimpleTrait, Outer: Deref<Target = Inner>> SimpleTrait for Outer {
+ type SimpleT = Inner::SimpleT;
+}
+
+pub trait AnotherTrait {
+ type AnotherT;
+}
+
+impl<T, Simple: SimpleTrait<SimpleT = Vec<T>>> AnotherTrait for Simple {
+ type AnotherT = T;
+}
+
+pub struct Unrelated<Inner, UnrelatedT: DerefMut<Target = Vec<Inner>>>(UnrelatedT);
+
+impl<Inner, UnrelatedT: DerefMut<Target = Vec<Inner>>> Deref for Unrelated<Inner, UnrelatedT> {
+ type Target = Vec<Inner>;
+
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+
+
+pub fn main() { }
+
diff --git a/src/test/rustdoc/no-crate-filter.rs b/src/test/rustdoc/no-crate-filter.rs
index e49ce9e..c694d14 100644
--- a/src/test/rustdoc/no-crate-filter.rs
+++ b/src/test/rustdoc/no-crate-filter.rs
@@ -1,13 +1,3 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
#![crate_name = "foo"]
// compile-flags: -Z unstable-options --disable-per-crate-search
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.rs b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.rs
new file mode 100644
index 0000000..5ea6919
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.rs
@@ -0,0 +1,29 @@
+#![feature(optin_builtin_traits)]
+
+// Test for issue #56934 - that it is impossible to redundantly
+// implement an auto-trait for a trait object type that contains it.
+
+// Negative impl variant.
+
+auto trait Marker1 {}
+auto trait Marker2 {}
+
+trait Object: Marker1 {}
+
+// A supertrait marker is illegal...
+impl !Marker1 for dyn Object + Marker2 { } //~ ERROR E0371
+// ...and also a direct component.
+impl !Marker2 for dyn Object + Marker2 { } //~ ERROR E0371
+
+// But implementing a marker if it is not present is OK.
+impl !Marker2 for dyn Object {} // OK
+
+// A non-principal trait-object type is orphan even in its crate.
+impl !Send for dyn Marker2 {} //~ ERROR E0117
+
+// And impl'ing a remote marker for a local trait object is forbidden
+// by one of these special orphan-like rules.
+impl !Send for dyn Object {} //~ ERROR E0321
+impl !Send for dyn Object + Marker2 {} //~ ERROR E0321
+
+fn main() { }
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.stderr b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.stderr
new file mode 100644
index 0000000..c8a146c
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-negative.stderr
@@ -0,0 +1,37 @@
+error[E0371]: the object type `(dyn Object + Marker2 + 'static)` automatically implements the trait `Marker1`
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:14:1
+ |
+LL | impl !Marker1 for dyn Object + Marker2 { } //~ ERROR E0371
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Object + Marker2 + 'static)` automatically implements trait `Marker1`
+
+error[E0371]: the object type `(dyn Object + Marker2 + 'static)` automatically implements the trait `Marker2`
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:16:1
+ |
+LL | impl !Marker2 for dyn Object + Marker2 { } //~ ERROR E0371
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Object + Marker2 + 'static)` automatically implements trait `Marker2`
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:22:1
+ |
+LL | impl !Send for dyn Marker2 {} //~ ERROR E0117
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+ |
+ = note: the impl does not reference only types defined in this crate
+ = note: define and implement a trait or new type instead
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `(dyn Object + 'static)`
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:26:1
+ |
+LL | impl !Send for dyn Object {} //~ ERROR E0321
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `(dyn Object + Marker2 + 'static)`
+ --> $DIR/coherence-impl-trait-for-marker-trait-negative.rs:27:1
+ |
+LL | impl !Send for dyn Object + Marker2 {} //~ ERROR E0321
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error: aborting due to 5 previous errors
+
+Some errors occurred: E0117, E0321, E0371.
+For more information about an error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.rs b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.rs
new file mode 100644
index 0000000..6b5689e
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.rs
@@ -0,0 +1,29 @@
+#![feature(optin_builtin_traits)]
+
+// Test for issue #56934 - that it is impossible to redundantly
+// implement an auto-trait for a trait object type that contains it.
+
+// Positive impl variant.
+
+auto trait Marker1 {}
+auto trait Marker2 {}
+
+trait Object: Marker1 {}
+
+// A supertrait marker is illegal...
+impl Marker1 for dyn Object + Marker2 { } //~ ERROR E0371
+// ...and also a direct component.
+impl Marker2 for dyn Object + Marker2 { } //~ ERROR E0371
+
+// But implementing a marker if it is not present is OK.
+impl Marker2 for dyn Object {} // OK
+
+// A non-principal trait-object type is orphan even in its crate.
+unsafe impl Send for dyn Marker2 {} //~ ERROR E0117
+
+// And impl'ing a remote marker for a local trait object is forbidden
+// by one of these special orphan-like rules.
+unsafe impl Send for dyn Object {} //~ ERROR E0321
+unsafe impl Send for dyn Object + Marker2 {} //~ ERROR E0321
+
+fn main() { }
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.stderr b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.stderr
new file mode 100644
index 0000000..78ca2f5
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-marker-trait-positive.stderr
@@ -0,0 +1,37 @@
+error[E0371]: the object type `(dyn Object + Marker2 + 'static)` automatically implements the trait `Marker1`
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:14:1
+ |
+LL | impl Marker1 for dyn Object + Marker2 { } //~ ERROR E0371
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Object + Marker2 + 'static)` automatically implements trait `Marker1`
+
+error[E0371]: the object type `(dyn Object + Marker2 + 'static)` automatically implements the trait `Marker2`
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:16:1
+ |
+LL | impl Marker2 for dyn Object + Marker2 { } //~ ERROR E0371
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `(dyn Object + Marker2 + 'static)` automatically implements trait `Marker2`
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:22:1
+ |
+LL | unsafe impl Send for dyn Marker2 {} //~ ERROR E0117
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+ |
+ = note: the impl does not reference only types defined in this crate
+ = note: define and implement a trait or new type instead
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `(dyn Object + 'static)`
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:26:1
+ |
+LL | unsafe impl Send for dyn Object {} //~ ERROR E0321
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `(dyn Object + Marker2 + 'static)`
+ --> $DIR/coherence-impl-trait-for-marker-trait-positive.rs:27:1
+ |
+LL | unsafe impl Send for dyn Object + Marker2 {} //~ ERROR E0321
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error: aborting due to 5 previous errors
+
+Some errors occurred: E0117, E0321, E0371.
+For more information about an error, try `rustc --explain E0117`.
diff --git a/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.rs b/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.rs
index c7e1b44..c5aa903 100644
--- a/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.rs
+++ b/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.rs
@@ -27,7 +27,8 @@
macro_rules! generate_s10 {
($expr: expr) => {
- #[cfg(feature = $expr)] //~ ERROR `cfg` is not a well-formed meta-item
+ #[cfg(feature = $expr)]
+ //~^ ERROR expected unsuffixed literal or identifier, found concat!("nonexistent")
struct S10;
}
}
diff --git a/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.stderr b/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.stderr
index da06a81..bcf13ea 100644
--- a/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.stderr
+++ b/src/test/ui/conditional-compilation/cfg-attr-syntax-validation.stderr
@@ -52,11 +52,11 @@
LL | #[cfg(a = b"hi")] //~ ERROR literal in `cfg` predicate value must be a string
| ^^^^^ help: consider removing the prefix: `"hi"`
-error: `cfg` is not a well-formed meta-item
- --> $DIR/cfg-attr-syntax-validation.rs:30:9
+error: expected unsuffixed literal or identifier, found concat!("nonexistent")
+ --> $DIR/cfg-attr-syntax-validation.rs:30:15
|
-LL | #[cfg(feature = $expr)] //~ ERROR `cfg` is not a well-formed meta-item
- | ^^^^^^^^^^^^^^^^^^^^^^^ help: expected syntax is: `#[cfg(/* predicate */)]`
+LL | #[cfg(feature = $expr)]
+ | ^^^^^^^
...
LL | generate_s10!(concat!("nonexistent"));
| -------------------------------------- in this macro invocation
diff --git a/src/test/ui/derives/deriving-meta-empty-trait-list.rs b/src/test/ui/derives/deriving-meta-empty-trait-list.rs
index 98da6d2..8824841 100644
--- a/src/test/ui/derives/deriving-meta-empty-trait-list.rs
+++ b/src/test/ui/derives/deriving-meta-empty-trait-list.rs
@@ -1,9 +1,4 @@
-// run-pass
-
-#![allow(dead_code)]
-
-#[derive] //~ WARNING empty trait list in `derive`
-struct Foo;
+// compile-pass
#[derive()] //~ WARNING empty trait list in `derive`
struct Bar;
diff --git a/src/test/ui/derives/deriving-meta-empty-trait-list.stderr b/src/test/ui/derives/deriving-meta-empty-trait-list.stderr
index dbc2387..191bb78 100644
--- a/src/test/ui/derives/deriving-meta-empty-trait-list.stderr
+++ b/src/test/ui/derives/deriving-meta-empty-trait-list.stderr
@@ -1,11 +1,5 @@
warning: empty trait list in `derive`
- --> $DIR/deriving-meta-empty-trait-list.rs:5:1
- |
-LL | #[derive] //~ WARNING empty trait list in `derive`
- | ^^^^^^^^^
-
-warning: empty trait list in `derive`
- --> $DIR/deriving-meta-empty-trait-list.rs:8:1
+ --> $DIR/deriving-meta-empty-trait-list.rs:3:1
|
LL | #[derive()] //~ WARNING empty trait list in `derive`
| ^^^^^^^^^^^
diff --git a/src/test/ui/did_you_mean/recursion_limit.stderr b/src/test/ui/did_you_mean/recursion_limit.stderr
index 08947fd..0738c3f 100644
--- a/src/test/ui/did_you_mean/recursion_limit.stderr
+++ b/src/test/ui/did_you_mean/recursion_limit.stderr
@@ -1,11 +1,10 @@
-error[E0275]: overflow evaluating the requirement `K: std::marker::Send`
+error[E0275]: overflow evaluating the requirement `J: std::marker::Send`
--> $DIR/recursion_limit.rs:34:5
|
LL | is_send::<A>(); //~ ERROR overflow evaluating the requirement
| ^^^^^^^^^^^^
|
= help: consider adding a `#![recursion_limit="20"]` attribute to your crate
- = note: required because it appears within the type `J`
= note: required because it appears within the type `I`
= note: required because it appears within the type `H`
= note: required because it appears within the type `G`
diff --git a/src/test/ui/error-codes/E0055.rs b/src/test/ui/error-codes/E0055.rs
index a3ade92..b525575 100644
--- a/src/test/ui/error-codes/E0055.rs
+++ b/src/test/ui/error-codes/E0055.rs
@@ -1,4 +1,4 @@
-#![recursion_limit="2"]
+#![recursion_limit="5"]
struct Foo;
impl Foo {
@@ -7,7 +7,7 @@
fn main() {
let foo = Foo;
- let ref_foo = &&Foo;
+ let ref_foo = &&&&&Foo;
ref_foo.foo();
//~^ ERROR E0055
}
diff --git a/src/test/ui/error-codes/E0055.stderr b/src/test/ui/error-codes/E0055.stderr
index cd2bd92..d06566f 100644
--- a/src/test/ui/error-codes/E0055.stderr
+++ b/src/test/ui/error-codes/E0055.stderr
@@ -4,7 +4,7 @@
LL | ref_foo.foo();
| ^^^ deref recursion limit reached
|
- = help: consider adding a `#![recursion_limit="4"]` attribute to your crate
+ = help: consider adding a `#![recursion_limit="10"]` attribute to your crate
error: aborting due to previous error
diff --git a/src/test/ui/error-codes/E0232.rs b/src/test/ui/error-codes/E0232.rs
deleted file mode 100644
index 8e80624..0000000
--- a/src/test/ui/error-codes/E0232.rs
+++ /dev/null
@@ -1,8 +0,0 @@
-#![feature(on_unimplemented)]
-
-#[rustc_on_unimplemented]
-//~^ ERROR E0232
-trait Bar {}
-
-fn main() {
-}
diff --git a/src/test/ui/error-codes/E0232.stderr b/src/test/ui/error-codes/E0232.stderr
deleted file mode 100644
index 9e9155b..0000000
--- a/src/test/ui/error-codes/E0232.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error[E0232]: `#[rustc_on_unimplemented]` requires a value
- --> $DIR/E0232.rs:3:1
- |
-LL | #[rustc_on_unimplemented]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^ value required here
- |
- = note: eg `#[rustc_on_unimplemented(message="foo")]`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0232`.
diff --git a/src/test/ui/error-codes/E0275.stderr b/src/test/ui/error-codes/E0275.stderr
index 817b482..f2b0f39 100644
--- a/src/test/ui/error-codes/E0275.stderr
+++ b/src/test/ui/error-codes/E0275.stderr
@@ -1,11 +1,10 @@
-error[E0275]: overflow evaluating the requirement `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: std::marker::Sized`
+error[E0275]: overflow evaluating the requirement `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: Foo`
--> $DIR/E0275.rs:5:1
|
LL | impl<T> Foo for T where Bar<T>: Foo {} //~ ERROR E0275
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider adding a `#![recursion_limit="128"]` attribute to your crate
- = note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<Bar<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
diff --git a/src/test/ui/error-codes/E0296.rs b/src/test/ui/error-codes/E0296.rs
deleted file mode 100644
index a1a8657..0000000
--- a/src/test/ui/error-codes/E0296.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-#![recursion_limit] //~ ERROR E0296
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0296.stderr b/src/test/ui/error-codes/E0296.stderr
deleted file mode 100644
index 41e9f7e..0000000
--- a/src/test/ui/error-codes/E0296.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0296]: malformed recursion limit attribute, expected #![recursion_limit="N"]
- --> $DIR/E0296.rs:1:1
- |
-LL | #![recursion_limit] //~ ERROR E0296
- | ^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0296`.
diff --git a/src/test/ui/error-codes/E0423.stderr b/src/test/ui/error-codes/E0423.stderr
index c422a1e..d0deb8c 100644
--- a/src/test/ui/error-codes/E0423.stderr
+++ b/src/test/ui/error-codes/E0423.stderr
@@ -29,19 +29,25 @@
--> $DIR/E0423.rs:12:32
|
LL | if let S { x: _x, y: 2 } = S { x: 1, y: 2 } { println!("Ok"); }
- | ^ did you mean `(S { /* fields */ })`?
+ | ^---------------
+ | |
+ | help: surround the struct literal with parenthesis: `(S { x: 1, y: 2 })`
error[E0423]: expected value, found struct `T`
--> $DIR/E0423.rs:15:8
|
LL | if T {} == T {} { println!("Ok"); }
- | ^ did you mean `(T { /* fields */ })`?
+ | ^---
+ | |
+ | help: surround the struct literal with parenthesis: `(T {})`
error[E0423]: expected value, found struct `std::ops::Range`
--> $DIR/E0423.rs:21:14
|
LL | for _ in std::ops::Range { start: 0, end: 10 } {}
- | ^^^^^^^^^^^^^^^ did you mean `(std::ops::Range { /* fields */ })`?
+ | ^^^^^^^^^^^^^^^----------------------
+ | |
+ | help: surround the struct literal with parenthesis: `(std::ops::Range { start: 0, end: 10 })`
error: aborting due to 7 previous errors
diff --git a/src/test/ui/error-codes/E0440.rs b/src/test/ui/error-codes/E0440.rs
deleted file mode 100644
index 8ac47f5..0000000
--- a/src/test/ui/error-codes/E0440.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd<T>(x: f64x2) -> i32; //~ ERROR E0440
-}
-
-fn main () {
-}
diff --git a/src/test/ui/error-codes/E0440.stderr b/src/test/ui/error-codes/E0440.stderr
deleted file mode 100644
index e153fb0..0000000
--- a/src/test/ui/error-codes/E0440.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0440]: platform-specific intrinsic has wrong number of type parameters: found 1, expected 0
- --> $DIR/E0440.rs:9:5
- |
-LL | fn x86_mm_movemask_pd<T>(x: f64x2) -> i32; //~ ERROR E0440
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0440`.
diff --git a/src/test/ui/error-codes/E0441.rs b/src/test/ui/error-codes/E0441.rs
deleted file mode 100644
index 90bdbe9..0000000
--- a/src/test/ui/error-codes/E0441.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_ep16(x: i16x8, y: i16x8) -> i16x8; //~ ERROR E0441
-}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0441.stderr b/src/test/ui/error-codes/E0441.stderr
deleted file mode 100644
index 73eddb2..0000000
--- a/src/test/ui/error-codes/E0441.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0441]: unrecognized platform-specific intrinsic function: `x86_mm_adds_ep16`
- --> $DIR/E0441.rs:9:5
- |
-LL | fn x86_mm_adds_ep16(x: i16x8, y: i16x8) -> i16x8; //~ ERROR E0441
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0441`.
diff --git a/src/test/ui/error-codes/E0442.rs b/src/test/ui/error-codes/E0442.rs
deleted file mode 100644
index a6eb596..0000000
--- a/src/test/ui/error-codes/E0442.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8,
- i8, i8, i8, i8, i8, i8, i8, i8);
-#[repr(simd)]
-struct i32x4(i32, i32, i32, i32);
-#[repr(simd)]
-struct i64x2(i64, i64);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- //~^ ERROR E0442
- //~| ERROR E0442
- //~| ERROR E0442
-}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0442.stderr b/src/test/ui/error-codes/E0442.stderr
deleted file mode 100644
index 017d461..0000000
--- a/src/test/ui/error-codes/E0442.stderr
+++ /dev/null
@@ -1,21 +0,0 @@
-error[E0442]: intrinsic argument 1 has wrong type: found vector with length 16, expected length 8
- --> $DIR/E0442.rs:14:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found vector with length 4, expected length 8
- --> $DIR/E0442.rs:14:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found vector with length 2, expected length 8
- --> $DIR/E0442.rs:14:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 3 previous errors
-
-For more information about this error, try `rustc --explain E0442`.
diff --git a/src/test/ui/error-codes/E0443.rs b/src/test/ui/error-codes/E0443.rs
deleted file mode 100644
index 4940f1d..0000000
--- a/src/test/ui/error-codes/E0443.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-#[repr(simd)]
-struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8; //~ ERROR E0443
-}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0443.stderr b/src/test/ui/error-codes/E0443.stderr
deleted file mode 100644
index 4c2e641..0000000
--- a/src/test/ui/error-codes/E0443.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0443]: intrinsic return value has wrong type: found `i64x8`, expected `i16x8` which was used for this vector type previously in this signature
- --> $DIR/E0443.rs:11:5
- |
-LL | fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8; //~ ERROR E0443
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0443`.
diff --git a/src/test/ui/error-codes/E0444.rs b/src/test/ui/error-codes/E0444.rs
deleted file mode 100644
index 3d73339..0000000
--- a/src/test/ui/error-codes/E0444.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-#![feature(repr_simd)]
-#![feature(platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ ERROR E0444
-}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0444.stderr b/src/test/ui/error-codes/E0444.stderr
deleted file mode 100644
index 0a894f7..0000000
--- a/src/test/ui/error-codes/E0444.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0444]: platform-specific intrinsic has invalid number of arguments: found 3, expected 1
- --> $DIR/E0444.rs:9:5
- |
-LL | fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ ERROR E0444
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0444`.
diff --git a/src/test/ui/error-codes/E0558.rs b/src/test/ui/error-codes/E0558.rs
deleted file mode 100644
index 26d16f6..0000000
--- a/src/test/ui/error-codes/E0558.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#[export_name]
-//~^ ERROR E0558
-
-pub fn something() {}
-
-fn main() {}
diff --git a/src/test/ui/error-codes/E0558.stderr b/src/test/ui/error-codes/E0558.stderr
deleted file mode 100644
index 95bd9a1..0000000
--- a/src/test/ui/error-codes/E0558.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0558]: `export_name` attribute has invalid format
- --> $DIR/E0558.rs:1:1
- |
-LL | #[export_name]
- | ^^^^^^^^^^^^^^ did you mean #[export_name="*"]?
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0558`.
diff --git a/src/test/ui/feature-gate/feature-gate-static-nobundle-2.rs b/src/test/ui/feature-gate/feature-gate-static-nobundle-2.rs
new file mode 100644
index 0000000..92844f9
--- /dev/null
+++ b/src/test/ui/feature-gate/feature-gate-static-nobundle-2.rs
@@ -0,0 +1,6 @@
+//~ ERROR kind="static-nobundle" is feature gated
+// Test the behavior of rustc when non-existent library is statically linked
+
+// compile-flags: -l static-nobundle=nonexistent
+
+fn main() {}
diff --git a/src/test/ui/feature-gate/feature-gate-static-nobundle-2.stderr b/src/test/ui/feature-gate/feature-gate-static-nobundle-2.stderr
new file mode 100644
index 0000000..419c219
--- /dev/null
+++ b/src/test/ui/feature-gate/feature-gate-static-nobundle-2.stderr
@@ -0,0 +1,7 @@
+error[E0658]: kind="static-nobundle" is feature gated (see issue #37403)
+ |
+ = help: add #![feature(static_nobundle)] to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs
index 051bfbe..b1a8cba 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.rs
@@ -30,75 +30,71 @@
// inputs are handled by each, and (2.) to ease searching for related
// occurrences in the source text.
-// skip-codegen
#![warn(unused_attributes, unknown_lints)]
-#![allow(dead_code)]
#![allow(stable_features)]
// UNGATED WHITE-LISTED BUILT-IN ATTRIBUTES
-#![warn (x5400)] //~ WARN unknown lint: `x5400`
-#![allow (x5300)] //~ WARN unknown lint: `x5300`
-#![forbid (x5200)] //~ WARN unknown lint: `x5200`
-#![deny (x5100)] //~ WARN unknown lint: `x5100`
+#![warn(x5400)] //~ WARN unknown lint: `x5400`
+#![allow(x5300)] //~ WARN unknown lint: `x5300`
+#![forbid(x5200)] //~ WARN unknown lint: `x5200`
+#![deny(x5100)] //~ WARN unknown lint: `x5100`
#![macro_use] // (allowed if no argument; see issue-43160-gating-of-macro_use.rs)
-#![macro_export = "4800"] //~ WARN unused attribute
-#![plugin_registrar = "4700"] //~ WARN unused attribute
+#![macro_export] //~ WARN unused attribute
+#![plugin_registrar] //~ WARN unused attribute
// skipping testing of cfg
// skipping testing of cfg_attr
-#![main = "x4400"] //~ WARN unused attribute
-#![start = "x4300"] //~ WARN unused attribute
+#![main] //~ WARN unused attribute
+#![start] //~ WARN unused attribute
// see issue-43106-gating-of-test.rs for crate-level; but non crate-level is below at "4200"
// see issue-43106-gating-of-bench.rs for crate-level; but non crate-level is below at "4100"
-#![repr = "3900"]
+#![repr()]
//~^ WARN unused attribute
-//~| WARN `repr` attribute isn't configurable with a literal
-#![path = "3800"] //~ WARN unused attribute
-#![abi = "3700"] //~ WARN unused attribute
-#![automatically_derived = "3600"] //~ WARN unused attribute
-#![no_mangle = "3500"]
-#![no_link = "3400"] //~ WARN unused attribute
+#![path = "3800"] //~ WARN unused attribute
+#![automatically_derived] //~ WARN unused attribute
+#![no_mangle]
+#![no_link] //~ WARN unused attribute
// see issue-43106-gating-of-derive.rs
-#![should_panic = "3200"] //~ WARN unused attribute
-#![ignore = "3100"] //~ WARN unused attribute
-#![no_implicit_prelude = "3000"]
+#![should_panic] //~ WARN unused attribute
+#![ignore] //~ WARN unused attribute
+#![no_implicit_prelude]
#![reexport_test_harness_main = "2900"]
// see gated-link-args.rs
// see issue-43106-gating-of-macro_escape.rs for crate-level; but non crate-level is below at "2700"
// (cannot easily test gating of crate-level #[no_std]; but non crate-level is below at "2600")
-#![proc_macro_derive = "2500"] //~ WARN unused attribute
-#![doc = "2400"]
-#![cold = "2300"]
-#![export_name = "2200"]
+#![proc_macro_derive()] //~ WARN unused attribute
+#![doc = "2400"]
+#![cold]
+#![export_name = "2200"]
// see issue-43106-gating-of-inline.rs
-#![link = "2000"]
-#![link_name = "1900"]
-#![link_section = "1800"]
-#![no_builtins = "1700"] // Yikes, dupe'd on BUILTIN_ATTRIBUTES list (see "0300")
-#![no_mangle = "1600"] // Yikes, dupe'd on BUILTIN_ATTRIBUTES list (see "3500")
+#![link()]
+#![link_name = "1900"]
+#![link_section = "1800"]
+#![no_builtins] // Yikes, dupe'd on BUILTIN_ATTRIBUTES list (see "0300")
+#![no_mangle] // Yikes, dupe'd on BUILTIN_ATTRIBUTES list (see "3500")
// see issue-43106-gating-of-rustc_deprecated.rs
-#![must_use = "1400"]
+#![must_use]
// see issue-43106-gating-of-stable.rs
// see issue-43106-gating-of-unstable.rs
// see issue-43106-gating-of-deprecated.rs
-#![windows_subsystem = "1000"]
+#![windows_subsystem = "1000"]
// UNGATED CRATE-LEVEL BUILT-IN ATTRIBUTES
-#![crate_name = "0900"]
-#![crate_type = "bin"] // cannot pass "0800" here
+#![crate_name = "0900"]
+#![crate_type = "bin"] // cannot pass "0800" here
// For #![crate_id], see issue #43142. (I cannot bear to enshrine current behavior in a test)
// FIXME(#44232) we should warn that this isn't used.
-#![feature ( rust1)]
+#![feature(rust1)]
// For #![no_start], see issue #43144. (I cannot bear to enshrine current behavior in a test)
// (cannot easily gating state of crate-level #[no_main]; but non crate-level is below at "0400")
-#![no_builtins = "0300"]
-#![recursion_limit = "0200"]
-#![type_length_limit = "0100"]
+#![no_builtins]
+#![recursion_limit = "0200"]
+#![type_length_limit = "0100"]
// USES OF BUILT-IN ATTRIBUTES IN OTHER ("UNUSUAL") PLACES
@@ -195,84 +191,84 @@
//~^ WARN unused attribute
}
-#[macro_export = "4800"]
+#[macro_export]
//~^ WARN unused attribute
mod macro_export {
- mod inner { #![macro_export="4800"] }
+ mod inner { #![macro_export] }
//~^ WARN unused attribute
- #[macro_export = "4800"] fn f() { }
+ #[macro_export] fn f() { }
//~^ WARN unused attribute
- #[macro_export = "4800"] struct S;
+ #[macro_export] struct S;
//~^ WARN unused attribute
- #[macro_export = "4800"] type T = S;
+ #[macro_export] type T = S;
//~^ WARN unused attribute
- #[macro_export = "4800"] impl S { }
+ #[macro_export] impl S { }
//~^ WARN unused attribute
}
-#[plugin_registrar = "4700"]
+#[plugin_registrar]
//~^ WARN unused attribute
mod plugin_registrar {
- mod inner { #![plugin_registrar="4700"] }
+ mod inner { #![plugin_registrar] }
//~^ WARN unused attribute
// for `fn f()` case, see gated-plugin_registrar.rs
- #[plugin_registrar = "4700"] struct S;
+ #[plugin_registrar] struct S;
//~^ WARN unused attribute
- #[plugin_registrar = "4700"] type T = S;
+ #[plugin_registrar] type T = S;
//~^ WARN unused attribute
- #[plugin_registrar = "4700"] impl S { }
+ #[plugin_registrar] impl S { }
//~^ WARN unused attribute
}
-#[main = "4400"]
+#[main]
//~^ WARN unused attribute
mod main {
- mod inner { #![main="4300"] }
+ mod inner { #![main] }
//~^ WARN unused attribute
// for `fn f()` case, see feature-gate-main.rs
- #[main = "4400"] struct S;
+ #[main] struct S;
//~^ WARN unused attribute
- #[main = "4400"] type T = S;
+ #[main] type T = S;
//~^ WARN unused attribute
- #[main = "4400"] impl S { }
+ #[main] impl S { }
//~^ WARN unused attribute
}
-#[start = "4300"]
+#[start]
//~^ WARN unused attribute
mod start {
- mod inner { #![start="4300"] }
+ mod inner { #![start] }
//~^ WARN unused attribute
// for `fn f()` case, see feature-gate-start.rs
- #[start = "4300"] struct S;
+ #[start] struct S;
//~^ WARN unused attribute
- #[start = "4300"] type T = S;
+ #[start] type T = S;
//~^ WARN unused attribute
- #[start = "4300"] impl S { }
+ #[start] impl S { }
//~^ WARN unused attribute
}
// At time of unit test authorship, if compiling without `--test` then
// non-crate-level #[test] attributes seem to be ignored.
-#[test = "4200"]
-mod test { mod inner { #![test="4200"] }
+#[test]
+mod test { mod inner { #![test] }
fn f() { }
@@ -286,41 +282,31 @@
// At time of unit test authorship, if compiling without `--test` then
// non-crate-level #[bench] attributes seem to be ignored.
-#[bench = "4100"]
+#[bench]
mod bench {
- mod inner { #![bench="4100"] }
+ mod inner { #![bench] }
- #[bench = "4100"]
+ #[bench]
struct S;
- #[bench = "4100"]
+ #[bench]
type T = S;
- #[bench = "4100"]
+ #[bench]
impl S { }
}
-#[repr = "3900"]
-//~^ WARN unused attribute
-//~| WARN `repr` attribute isn't configurable with a literal
+#[repr()]
mod repr {
- mod inner { #![repr="3900"] }
- //~^ WARN unused attribute
- //~| WARN `repr` attribute isn't configurable with a literal
+ mod inner { #![repr()] }
- #[repr = "3900"] fn f() { }
- //~^ WARN unused attribute
- //~| WARN `repr` attribute isn't configurable with a literal
+ #[repr()] fn f() { }
struct S;
- #[repr = "3900"] type T = S;
- //~^ WARN unused attribute
- //~| WARN `repr` attribute isn't configurable with a literal
+ #[repr()] type T = S;
- #[repr = "3900"] impl S { }
- //~^ WARN unused attribute
- //~| WARN `repr` attribute isn't configurable with a literal
+ #[repr()] impl S { }
}
#[path = "3800"]
@@ -340,130 +326,111 @@
//~^ WARN unused attribute
}
-#[abi = "3700"]
-//~^ WARN unused attribute
-mod abi {
- mod inner { #![abi="3700"] }
- //~^ WARN unused attribute
-
- #[abi = "3700"] fn f() { }
- //~^ WARN unused attribute
-
- #[abi = "3700"] struct S;
- //~^ WARN unused attribute
-
- #[abi = "3700"] type T = S;
- //~^ WARN unused attribute
-
- #[abi = "3700"] impl S { }
- //~^ WARN unused attribute
-}
-
-#[automatically_derived = "3600"]
+#[automatically_derived]
//~^ WARN unused attribute
mod automatically_derived {
- mod inner { #![automatically_derived="3600"] }
+ mod inner { #![automatically_derived] }
//~^ WARN unused attribute
- #[automatically_derived = "3600"] fn f() { }
+ #[automatically_derived] fn f() { }
//~^ WARN unused attribute
- #[automatically_derived = "3600"] struct S;
+ #[automatically_derived] struct S;
//~^ WARN unused attribute
- #[automatically_derived = "3600"] type T = S;
+ #[automatically_derived] type T = S;
//~^ WARN unused attribute
- #[automatically_derived = "3600"] impl S { }
+ #[automatically_derived] impl S { }
//~^ WARN unused attribute
}
-#[no_mangle = "3500"]
+#[no_mangle]
mod no_mangle {
- mod inner { #![no_mangle="3500"] }
+ mod inner { #![no_mangle] }
- #[no_mangle = "3500"] fn f() { }
+ #[no_mangle] fn f() { }
- #[no_mangle = "3500"] struct S;
+ #[no_mangle] struct S;
- #[no_mangle = "3500"] type T = S;
+ #[no_mangle] type T = S;
- #[no_mangle = "3500"] impl S { }
+ #[no_mangle] impl S { }
}
-#[no_link = "3400"]
+#[no_link]
//~^ WARN unused attribute
mod no_link {
- mod inner { #![no_link="3400"] }
+ mod inner { #![no_link] }
//~^ WARN unused attribute
- #[no_link = "3400"] fn f() { }
+ #[no_link] fn f() { }
//~^ WARN unused attribute
- #[no_link = "3400"] struct S;
+ #[no_link] struct S;
//~^ WARN unused attribute
- #[no_link = "3400"]type T = S;
+ #[no_link]type T = S;
//~^ WARN unused attribute
- #[no_link = "3400"] impl S { }
+ #[no_link] impl S { }
//~^ WARN unused attribute
}
-#[should_panic = "3200"]
+#[should_panic]
//~^ WARN unused attribute
mod should_panic {
- mod inner { #![should_panic="3200"] }
+ mod inner { #![should_panic] }
//~^ WARN unused attribute
- #[should_panic = "3200"] fn f() { }
+ #[should_panic] fn f() { }
//~^ WARN unused attribute
- #[should_panic = "3200"] struct S;
+ #[should_panic] struct S;
//~^ WARN unused attribute
- #[should_panic = "3200"] type T = S;
+ #[should_panic] type T = S;
//~^ WARN unused attribute
- #[should_panic = "3200"] impl S { }
+ #[should_panic] impl S { }
//~^ WARN unused attribute
}
-#[ignore = "3100"]
+#[ignore]
//~^ WARN unused attribute
mod ignore {
- mod inner { #![ignore="3100"] }
+ mod inner { #![ignore] }
//~^ WARN unused attribute
- #[ignore = "3100"] fn f() { }
+ #[ignore] fn f() { }
//~^ WARN unused attribute
- #[ignore = "3100"] struct S;
+ #[ignore] struct S;
//~^ WARN unused attribute
- #[ignore = "3100"] type T = S;
+ #[ignore] type T = S;
//~^ WARN unused attribute
- #[ignore = "3100"] impl S { }
+ #[ignore] impl S { }
//~^ WARN unused attribute
}
-#[no_implicit_prelude = "3000"]
+#[no_implicit_prelude]
//~^ WARN unused attribute
mod no_implicit_prelude {
- mod inner { #![no_implicit_prelude="3000"] }
+ mod inner { #![no_implicit_prelude] }
//~^ WARN unused attribute
- #[no_implicit_prelude = "3000"] fn f() { }
+ #[no_implicit_prelude] fn f() { }
//~^ WARN unused attribute
- #[no_implicit_prelude = "3000"] struct S;
+ #[no_implicit_prelude] struct S;
//~^ WARN unused attribute
- #[no_implicit_prelude = "3000"] type T = S;
+ #[no_implicit_prelude] type T = S;
//~^ WARN unused attribute
- #[no_implicit_prelude = "3000"] impl S { }
+ #[no_implicit_prelude] impl S { }
//~^ WARN unused attribute
}
@@ -506,27 +473,27 @@
//~^ WARN unused attribute
}
-#[no_std = "2600"]
+#[no_std]
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
mod no_std {
- mod inner { #![no_std="2600"] }
+ mod inner { #![no_std] }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be in the root module
- #[no_std = "2600"] fn f() { }
+ #[no_std] fn f() { }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_std = "2600"] struct S;
+ #[no_std] struct S;
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_std = "2600"] type T = S;
+ #[no_std] type T = S;
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_std = "2600"] impl S { }
+ #[no_std] impl S { }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
}
@@ -548,17 +515,17 @@
#[doc = "2400"] impl S { }
}
-#[cold = "2300"]
+#[cold]
mod cold {
- mod inner { #![cold="2300"] }
+ mod inner { #![cold] }
- #[cold = "2300"] fn f() { }
+ #[cold] fn f() { }
- #[cold = "2300"] struct S;
+ #[cold] struct S;
- #[cold = "2300"] type T = S;
+ #[cold] type T = S;
- #[cold = "2300"] impl S { }
+ #[cold] impl S { }
}
#[export_name = "2200"]
@@ -579,17 +546,17 @@
// out that we allow them at non-crate-level (though I do not know
// whether they have the same effect here as at crate-level).
-#[link = "2000"]
+#[link()]
mod link {
- mod inner { #![link="2000"] }
+ mod inner { #![link()] }
- #[link = "2000"] fn f() { }
+ #[link()] fn f() { }
- #[link = "2000"] struct S;
+ #[link()] struct S;
- #[link = "2000"] type T = S;
+ #[link()] type T = S;
- #[link = "2000"] impl S { }
+ #[link()] impl S { }
}
#[link_name = "1900"]
@@ -620,30 +587,30 @@
struct StructForDeprecated;
-#[deprecated = "1500"]
+#[deprecated]
mod deprecated {
- mod inner { #![deprecated="1500"] }
+ mod inner { #![deprecated] }
- #[deprecated = "1500"] fn f() { }
+ #[deprecated] fn f() { }
- #[deprecated = "1500"] struct S1;
+ #[deprecated] struct S1;
- #[deprecated = "1500"] type T = super::StructForDeprecated;
+ #[deprecated] type T = super::StructForDeprecated;
- #[deprecated = "1500"] impl super::StructForDeprecated { }
+ #[deprecated] impl super::StructForDeprecated { }
}
-#[must_use = "1400"]
+#[must_use]
mod must_use {
- mod inner { #![must_use="1400"] }
+ mod inner { #![must_use] }
- #[must_use = "1400"] fn f() { }
+ #[must_use] fn f() { }
- #[must_use = "1400"] struct S;
+ #[must_use] struct S;
- #[must_use = "1400"] type T = S;
+ #[must_use] type T = S;
- #[must_use = "1400"] impl S { }
+ #[must_use] impl S { }
}
#[windows_subsystem = "1000"]
@@ -737,42 +704,42 @@
}
-#[no_main = "0400"]
+#[no_main]
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
mod no_main_1 {
- mod inner { #![no_main="0400"] }
+ mod inner { #![no_main] }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be in the root module
- #[no_main = "0400"] fn f() { }
+ #[no_main] fn f() { }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_main = "0400"] struct S;
+ #[no_main] struct S;
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_main = "0400"] type T = S;
+ #[no_main] type T = S;
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
- #[no_main = "0400"] impl S { }
+ #[no_main] impl S { }
//~^ WARN unused attribute
//~| WARN crate-level attribute should be an inner attribute
}
-#[no_builtins = "0300"]
+#[no_builtins]
mod no_builtins {
- mod inner { #![no_builtins="0200"] }
+ mod inner { #![no_builtins] }
- #[no_builtins = "0300"] fn f() { }
+ #[no_builtins] fn f() { }
- #[no_builtins = "0300"] struct S;
+ #[no_builtins] struct S;
- #[no_builtins = "0300"] type T = S;
+ #[no_builtins] type T = S;
- #[no_builtins = "0300"] impl S { }
+ #[no_builtins] impl S { }
}
#[recursion_limit="0200"]
@@ -825,12 +792,4 @@
//~| WARN crate-level attribute should be an inner attribute
}
-
-
-
-
-
-
-fn main() {
- println!("Hello World");
-}
+fn main() {}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr
index cb3e9bd..4d15ccb 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-builtin-attrs.stderr
@@ -1,1307 +1,1180 @@
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:40:33
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:38:9
|
-LL | #![warn (x5400)] //~ WARN unknown lint: `x5400`
- | ^^^^^
+LL | #![warn(x5400)] //~ WARN unknown lint: `x5400`
+ | ^^^^^
|
note: lint level defined here
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:34:28
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:33:28
|
LL | #![warn(unused_attributes, unknown_lints)]
| ^^^^^^^^^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:41:33
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:39:10
|
-LL | #![allow (x5300)] //~ WARN unknown lint: `x5300`
- | ^^^^^
+LL | #![allow(x5300)] //~ WARN unknown lint: `x5300`
+ | ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:42:33
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:40:11
|
-LL | #![forbid (x5200)] //~ WARN unknown lint: `x5200`
- | ^^^^^
+LL | #![forbid(x5200)] //~ WARN unknown lint: `x5200`
+ | ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:43:33
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:41:9
|
-LL | #![deny (x5100)] //~ WARN unknown lint: `x5100`
- | ^^^^^
+LL | #![deny(x5100)] //~ WARN unknown lint: `x5100`
+ | ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:105:8
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:101:8
|
LL | #[warn(x5400)]
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:108:25
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:104:25
|
LL | mod inner { #![warn(x5400)] }
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:111:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:107:12
|
LL | #[warn(x5400)] fn f() { }
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:114:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:110:12
|
LL | #[warn(x5400)] struct S;
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:117:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:113:12
|
LL | #[warn(x5400)] type T = S;
| ^^^^^
warning: unknown lint: `x5400`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:120:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:116:12
|
LL | #[warn(x5400)] impl S { }
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:124:9
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:120:9
|
LL | #[allow(x5300)]
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:127:26
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:123:26
|
LL | mod inner { #![allow(x5300)] }
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:130:13
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:126:13
|
LL | #[allow(x5300)] fn f() { }
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:133:13
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:129:13
|
LL | #[allow(x5300)] struct S;
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:136:13
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:132:13
|
LL | #[allow(x5300)] type T = S;
| ^^^^^
warning: unknown lint: `x5300`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:139:13
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:135:13
|
LL | #[allow(x5300)] impl S { }
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:143:10
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:139:10
|
LL | #[forbid(x5200)]
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:146:27
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:142:27
|
LL | mod inner { #![forbid(x5200)] }
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:149:14
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:145:14
|
LL | #[forbid(x5200)] fn f() { }
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:152:14
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:148:14
|
LL | #[forbid(x5200)] struct S;
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:155:14
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:151:14
|
LL | #[forbid(x5200)] type T = S;
| ^^^^^
warning: unknown lint: `x5200`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:158:14
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:154:14
|
LL | #[forbid(x5200)] impl S { }
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:162:8
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:158:8
|
LL | #[deny(x5100)]
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:165:25
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:161:25
|
LL | mod inner { #![deny(x5100)] }
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:168:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:164:12
|
LL | #[deny(x5100)] fn f() { }
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:171:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:167:12
|
LL | #[deny(x5100)] struct S;
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:174:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:170:12
|
LL | #[deny(x5100)] type T = S;
| ^^^^^
warning: unknown lint: `x5100`
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:177:12
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:173:12
|
LL | #[deny(x5100)] impl S { }
| ^^^^^
warning: macro_escape is a deprecated synonym for macro_use
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:490:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:457:1
|
LL | #[macro_escape]
| ^^^^^^^^^^^^^^^
warning: macro_escape is a deprecated synonym for macro_use
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:493:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:460:17
|
LL | mod inner { #![macro_escape] }
| ^^^^^^^^^^^^^^^^
|
= help: consider an outer attribute, #[macro_use] mod ...
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:307:17
- |
-LL | mod inner { #![repr="3900"] }
- | ^^^^^^^^^^^^^^^ needs a hint
- |
- = note: #[warn(bad_repr)] on by default
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:311:5
- |
-LL | #[repr = "3900"] fn f() { }
- | ^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:317:5
- |
-LL | #[repr = "3900"] type T = S;
- | ^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:321:5
- |
-LL | #[repr = "3900"] impl S { }
- | ^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:303:1
- |
-LL | #[repr = "3900"]
- | ^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:53:1
- |
-LL | #![repr = "3900"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
-
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:185:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:181:5
|
LL | #[macro_use] fn f() { }
| ^^^^^^^^^^^^
|
note: lint level defined here
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:34:9
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:33:9
|
LL | #![warn(unused_attributes, unknown_lints)]
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:188:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:184:5
|
LL | #[macro_use] struct S;
| ^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:191:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:187:5
|
LL | #[macro_use] type T = S;
| ^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:194:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:190:5
|
LL | #[macro_use] impl S { }
| ^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:201:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:197:17
|
-LL | mod inner { #![macro_export="4800"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:204:5
- |
-LL | #[macro_export = "4800"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:207:5
- |
-LL | #[macro_export = "4800"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:210:5
- |
-LL | #[macro_export = "4800"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:213:5
- |
-LL | #[macro_export = "4800"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:198:1
- |
-LL | #[macro_export = "4800"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:220:17
- |
-LL | mod inner { #![plugin_registrar="4700"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:225:5
- |
-LL | #[plugin_registrar = "4700"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:228:5
- |
-LL | #[plugin_registrar = "4700"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:231:5
- |
-LL | #[plugin_registrar = "4700"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:217:1
- |
-LL | #[plugin_registrar = "4700"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:238:17
- |
-LL | mod inner { #![main="4300"] }
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:243:5
- |
-LL | #[main = "4400"] struct S;
- | ^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:246:5
- |
-LL | #[main = "4400"] type T = S;
- | ^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:249:5
- |
-LL | #[main = "4400"] impl S { }
- | ^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:235:1
- |
-LL | #[main = "4400"]
- | ^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:256:17
- |
-LL | mod inner { #![start="4300"] }
+LL | mod inner { #![macro_export] }
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:261:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:200:5
|
-LL | #[start = "4300"] struct S;
- | ^^^^^^^^^^^^^^^^^
+LL | #[macro_export] fn f() { }
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:264:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:203:5
|
-LL | #[start = "4300"] type T = S;
- | ^^^^^^^^^^^^^^^^^
+LL | #[macro_export] struct S;
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:267:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:206:5
|
-LL | #[start = "4300"] impl S { }
- | ^^^^^^^^^^^^^^^^^
+LL | #[macro_export] type T = S;
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:253:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:209:5
|
-LL | #[start = "4300"]
- | ^^^^^^^^^^^^^^^^^
+LL | #[macro_export] impl S { }
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:307:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:194:1
|
-LL | mod inner { #![repr="3900"] }
- | ^^^^^^^^^^^^^^^
+LL | #[macro_export]
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:311:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:216:17
|
-LL | #[repr = "3900"] fn f() { }
- | ^^^^^^^^^^^^^^^^
+LL | mod inner { #![plugin_registrar] }
+ | ^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:317:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:221:5
|
-LL | #[repr = "3900"] type T = S;
- | ^^^^^^^^^^^^^^^^
+LL | #[plugin_registrar] struct S;
+ | ^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:321:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:224:5
|
-LL | #[repr = "3900"] impl S { }
- | ^^^^^^^^^^^^^^^^
+LL | #[plugin_registrar] type T = S;
+ | ^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:303:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:227:5
|
-LL | #[repr = "3900"]
- | ^^^^^^^^^^^^^^^^
+LL | #[plugin_registrar] impl S { }
+ | ^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:330:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:213:1
+ |
+LL | #[plugin_registrar]
+ | ^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:234:17
+ |
+LL | mod inner { #![main] }
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:239:5
+ |
+LL | #[main] struct S;
+ | ^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:242:5
+ |
+LL | #[main] type T = S;
+ | ^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:245:5
+ |
+LL | #[main] impl S { }
+ | ^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:231:1
+ |
+LL | #[main]
+ | ^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:252:17
+ |
+LL | mod inner { #![start] }
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:257:5
+ |
+LL | #[start] struct S;
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:260:5
+ |
+LL | #[start] type T = S;
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:263:5
+ |
+LL | #[start] impl S { }
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:249:1
+ |
+LL | #[start]
+ | ^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:316:5
|
LL | #[path = "3800"] fn f() { }
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:333:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:319:5
|
LL | #[path = "3800"] struct S;
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:336:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:322:5
|
LL | #[path = "3800"] type T = S;
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:339:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:325:5
|
LL | #[path = "3800"] impl S { }
| ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:346:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:332:17
|
-LL | mod inner { #![abi="3700"] }
- | ^^^^^^^^^^^^^^
+LL | mod inner { #![automatically_derived] }
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:349:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:335:5
|
-LL | #[abi = "3700"] fn f() { }
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:352:5
- |
-LL | #[abi = "3700"] struct S;
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:355:5
- |
-LL | #[abi = "3700"] type T = S;
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:358:5
- |
-LL | #[abi = "3700"] impl S { }
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:343:1
- |
-LL | #[abi = "3700"]
- | ^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:365:17
- |
-LL | mod inner { #![automatically_derived="3600"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:368:5
- |
-LL | #[automatically_derived = "3600"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:371:5
- |
-LL | #[automatically_derived = "3600"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:374:5
- |
-LL | #[automatically_derived = "3600"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:377:5
- |
-LL | #[automatically_derived = "3600"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:362:1
- |
-LL | #[automatically_derived = "3600"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:397:17
- |
-LL | mod inner { #![no_link="3400"] }
- | ^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:400:5
- |
-LL | #[no_link = "3400"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:403:5
- |
-LL | #[no_link = "3400"] struct S;
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:406:5
- |
-LL | #[no_link = "3400"]type T = S;
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:409:5
- |
-LL | #[no_link = "3400"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:394:1
- |
-LL | #[no_link = "3400"]
- | ^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:416:17
- |
-LL | mod inner { #![should_panic="3200"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:419:5
- |
-LL | #[should_panic = "3200"] fn f() { }
+LL | #[automatically_derived] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:422:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:338:5
|
-LL | #[should_panic = "3200"] struct S;
+LL | #[automatically_derived] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:425:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:341:5
|
-LL | #[should_panic = "3200"] type T = S;
+LL | #[automatically_derived] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:428:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:344:5
|
-LL | #[should_panic = "3200"] impl S { }
+LL | #[automatically_derived] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:413:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:329:1
|
-LL | #[should_panic = "3200"]
+LL | #[automatically_derived]
| ^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:435:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:364:17
|
-LL | mod inner { #![ignore="3100"] }
- | ^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_link] }
+ | ^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:438:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:367:5
|
-LL | #[ignore = "3100"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link] fn f() { }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:441:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:370:5
|
-LL | #[ignore = "3100"] struct S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link] struct S;
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:444:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:373:5
|
-LL | #[ignore = "3100"] type T = S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link]type T = S;
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:447:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:376:5
|
-LL | #[ignore = "3100"] impl S { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link] impl S { }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:432:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:361:1
|
-LL | #[ignore = "3100"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_link]
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:454:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:383:17
|
-LL | mod inner { #![no_implicit_prelude="3000"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![should_panic] }
+ | ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:457:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:386:5
|
-LL | #[no_implicit_prelude = "3000"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic] fn f() { }
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:460:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:389:5
|
-LL | #[no_implicit_prelude = "3000"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic] struct S;
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:463:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:392:5
|
-LL | #[no_implicit_prelude = "3000"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic] type T = S;
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:466:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:395:5
|
-LL | #[no_implicit_prelude = "3000"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic] impl S { }
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:451:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:380:1
|
-LL | #[no_implicit_prelude = "3000"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[should_panic]
+ | ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:473:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:402:17
+ |
+LL | mod inner { #![ignore] }
+ | ^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:405:5
+ |
+LL | #[ignore] fn f() { }
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:408:5
+ |
+LL | #[ignore] struct S;
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:411:5
+ |
+LL | #[ignore] type T = S;
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:414:5
+ |
+LL | #[ignore] impl S { }
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:399:1
+ |
+LL | #[ignore]
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:421:17
+ |
+LL | mod inner { #![no_implicit_prelude] }
+ | ^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:424:5
+ |
+LL | #[no_implicit_prelude] fn f() { }
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:427:5
+ |
+LL | #[no_implicit_prelude] struct S;
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:430:5
+ |
+LL | #[no_implicit_prelude] type T = S;
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:433:5
+ |
+LL | #[no_implicit_prelude] impl S { }
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:418:1
+ |
+LL | #[no_implicit_prelude]
+ | ^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:440:17
|
LL | mod inner { #![reexport_test_harness_main="2900"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:476:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:443:5
|
LL | #[reexport_test_harness_main = "2900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:479:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:446:5
|
LL | #[reexport_test_harness_main = "2900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:482:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:449:5
|
LL | #[reexport_test_harness_main = "2900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:485:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:452:5
|
LL | #[reexport_test_harness_main = "2900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:470:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:437:1
|
LL | #[reexport_test_harness_main = "2900"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:496:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:463:5
|
LL | #[macro_escape] fn f() { }
| ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:499:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:466:5
|
LL | #[macro_escape] struct S;
| ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:502:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:469:5
|
LL | #[macro_escape] type T = S;
| ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:505:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:472:5
|
LL | #[macro_escape] impl S { }
| ^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:513:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:480:17
|
-LL | mod inner { #![no_std="2600"] }
- | ^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_std] }
+ | ^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:513:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:480:17
|
-LL | mod inner { #![no_std="2600"] }
- | ^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_std] }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:517:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:484:5
|
-LL | #[no_std = "2600"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] fn f() { }
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:517:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:484:5
|
-LL | #[no_std = "2600"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] fn f() { }
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:521:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:488:5
|
-LL | #[no_std = "2600"] struct S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] struct S;
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:521:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:488:5
|
-LL | #[no_std = "2600"] struct S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] struct S;
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:525:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:492:5
|
-LL | #[no_std = "2600"] type T = S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] type T = S;
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:525:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:492:5
|
-LL | #[no_std = "2600"] type T = S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] type T = S;
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:529:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:496:5
|
-LL | #[no_std = "2600"] impl S { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] impl S { }
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:529:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:496:5
|
-LL | #[no_std = "2600"] impl S { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std] impl S { }
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:509:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:476:1
|
-LL | #[no_std = "2600"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std]
+ | ^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:509:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:476:1
|
-LL | #[no_std = "2600"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[no_std]
+ | ^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:668:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:635:17
|
LL | mod inner { #![crate_name="0900"] }
| ^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:668:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:635:17
|
LL | mod inner { #![crate_name="0900"] }
| ^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:672:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:639:5
|
LL | #[crate_name = "0900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:672:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:639:5
|
LL | #[crate_name = "0900"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:676:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:643:5
|
LL | #[crate_name = "0900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:676:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:643:5
|
LL | #[crate_name = "0900"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:680:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:647:5
|
LL | #[crate_name = "0900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:680:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:647:5
|
LL | #[crate_name = "0900"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:684:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:651:5
|
LL | #[crate_name = "0900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:684:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:651:5
|
LL | #[crate_name = "0900"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:664:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:631:1
|
LL | #[crate_name = "0900"]
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:664:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:631:1
|
LL | #[crate_name = "0900"]
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:693:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:660:17
|
LL | mod inner { #![crate_type="0800"] }
| ^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:693:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:660:17
|
LL | mod inner { #![crate_type="0800"] }
| ^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:697:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:664:5
|
LL | #[crate_type = "0800"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:697:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:664:5
|
LL | #[crate_type = "0800"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:668:5
|
LL | #[crate_type = "0800"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:668:5
|
LL | #[crate_type = "0800"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:705:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:672:5
|
LL | #[crate_type = "0800"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:705:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:672:5
|
LL | #[crate_type = "0800"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:709:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:676:5
|
LL | #[crate_type = "0800"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:709:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:676:5
|
LL | #[crate_type = "0800"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:689:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:656:1
|
LL | #[crate_type = "0800"]
| ^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:689:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:656:1
|
LL | #[crate_type = "0800"]
| ^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:718:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:685:17
|
LL | mod inner { #![feature(x0600)] }
| ^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:718:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:685:17
|
LL | mod inner { #![feature(x0600)] }
| ^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:722:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:689:5
|
LL | #[feature(x0600)] fn f() { }
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:722:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:689:5
|
LL | #[feature(x0600)] fn f() { }
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:726:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:693:5
|
LL | #[feature(x0600)] struct S;
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:726:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:693:5
|
LL | #[feature(x0600)] struct S;
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:730:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:697:5
|
LL | #[feature(x0600)] type T = S;
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:730:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:697:5
|
LL | #[feature(x0600)] type T = S;
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:734:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
|
LL | #[feature(x0600)] impl S { }
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:734:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:701:5
|
LL | #[feature(x0600)] impl S { }
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:714:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:681:1
|
LL | #[feature(x0600)]
| ^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:714:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:681:1
|
LL | #[feature(x0600)]
| ^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:744:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:711:17
|
-LL | mod inner { #![no_main="0400"] }
- | ^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_main] }
+ | ^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:744:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:711:17
|
-LL | mod inner { #![no_main="0400"] }
- | ^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![no_main] }
+ | ^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:748:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:715:5
|
-LL | #[no_main = "0400"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] fn f() { }
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:748:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:715:5
|
-LL | #[no_main = "0400"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] fn f() { }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:752:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:719:5
|
-LL | #[no_main = "0400"] struct S;
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] struct S;
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:752:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:719:5
|
-LL | #[no_main = "0400"] struct S;
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] struct S;
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:756:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:723:5
|
-LL | #[no_main = "0400"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] type T = S;
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:756:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:723:5
|
-LL | #[no_main = "0400"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] type T = S;
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:760:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:727:5
|
-LL | #[no_main = "0400"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] impl S { }
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:760:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:727:5
|
-LL | #[no_main = "0400"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main] impl S { }
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:740:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:707:1
|
-LL | #[no_main = "0400"]
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main]
+ | ^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:740:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:707:1
|
-LL | #[no_main = "0400"]
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[no_main]
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:749:17
|
LL | mod inner { #![recursion_limit="0200"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:749:17
|
LL | mod inner { #![recursion_limit="0200"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:753:5
|
LL | #[recursion_limit="0200"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:753:5
|
LL | #[recursion_limit="0200"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:757:5
|
LL | #[recursion_limit="0200"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:757:5
|
LL | #[recursion_limit="0200"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:794:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:761:5
|
LL | #[recursion_limit="0200"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:794:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:761:5
|
LL | #[recursion_limit="0200"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:798:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:765:5
|
LL | #[recursion_limit="0200"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:798:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:765:5
|
LL | #[recursion_limit="0200"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:745:1
|
LL | #[recursion_limit="0200"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:745:1
|
LL | #[recursion_limit="0200"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:807:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:774:17
|
LL | mod inner { #![type_length_limit="0100"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be in the root module
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:807:17
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:774:17
|
LL | mod inner { #![type_length_limit="0100"] }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:811:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:5
|
LL | #[type_length_limit="0100"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:811:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:778:5
|
LL | #[type_length_limit="0100"] fn f() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:815:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:5
|
LL | #[type_length_limit="0100"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:815:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:782:5
|
LL | #[type_length_limit="0100"] struct S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:819:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
|
LL | #[type_length_limit="0100"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:819:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:786:5
|
LL | #[type_length_limit="0100"] type T = S;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:823:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
|
LL | #[type_length_limit="0100"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:823:5
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:790:5
|
LL | #[type_length_limit="0100"] impl S { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:803:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:1
|
LL | #[type_length_limit="0100"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: crate-level attribute should be an inner attribute: add an exclamation mark: #![foo]
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:803:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:770:1
|
LL | #[type_length_limit="0100"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:45:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:43:1
|
-LL | #![macro_export = "4800"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![macro_export] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:46:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:44:1
|
-LL | #![plugin_registrar = "4700"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![plugin_registrar] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:49:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:47:1
|
-LL | #![main = "x4400"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![main] //~ WARN unused attribute
+ | ^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:50:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:48:1
|
-LL | #![start = "x4300"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![start] //~ WARN unused attribute
+ | ^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:51:1
+ |
+LL | #![repr()]
+ | ^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:53:1
|
-LL | #![repr = "3900"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![path = "3800"] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^^
+
+warning: unused attribute
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:54:1
+ |
+LL | #![automatically_derived] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:56:1
|
-LL | #![path = "3800"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:57:1
- |
-LL | #![abi = "3700"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![no_link] //~ WARN unused attribute
+ | ^^^^^^^^^^^
warning: unused attribute
--> $DIR/issue-43106-gating-of-builtin-attrs.rs:58:1
|
-LL | #![automatically_derived = "3600"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![should_panic] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:60:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:59:1
|
-LL | #![no_link = "3400"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![ignore] //~ WARN unused attribute
+ | ^^^^^^^^^^
warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:62:1
+ --> $DIR/issue-43106-gating-of-builtin-attrs.rs:65:1
|
-LL | #![should_panic = "3200"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:63:1
- |
-LL | #![ignore = "3100"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-warning: unused attribute
- --> $DIR/issue-43106-gating-of-builtin-attrs.rs:69:1
- |
-LL | #![proc_macro_derive = "2500"] //~ WARN unused attribute
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![proc_macro_derive()] //~ WARN unused attribute
+ | ^^^^^^^^^^^^^^^^^^^^^^^
error: invalid windows subsystem `1000`, only `windows` and `console` are allowed
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-deprecated.rs b/src/test/ui/feature-gate/issue-43106-gating-of-deprecated.rs
index 32f30ce..360d570 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-deprecated.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-deprecated.rs
@@ -7,15 +7,7 @@
// compile-pass
// skip-codegen
-#![allow(dead_code)]
-#![deprecated = "1100"]
-// Since we expect for the mix of attributes used here to compile
-// successfully, and we are just testing for the expected warnings of
-// various (mis)uses of attributes, we use the `rustc_error` attribute
-// on the `fn main()`.
+#![deprecated]
-
-fn main() {
- println!("Hello World");
-}
+fn main() {}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-inline.rs b/src/test/ui/feature-gate/issue-43106-gating-of-inline.rs
index 7c17cd1..bb9e6d4 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-inline.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-inline.rs
@@ -6,23 +6,25 @@
// issue-43106-gating-of-builtin-attrs.rs)
// Crate-level is accepted, though it is almost certainly unused?
-#![inline = "2100"]
+#![inline]
-#[inline = "2100"]
+#[inline]
//~^ ERROR attribute should be applied to function or closure
mod inline {
- mod inner { #![inline="2100"] }
+ mod inner { #![inline] }
//~^ ERROR attribute should be applied to function or closure
#[inline = "2100"] fn f() { }
+ //~^ WARN attribute must be of the form
+ //~| WARN this was previously accepted
- #[inline = "2100"] struct S;
+ #[inline] struct S;
//~^ ERROR attribute should be applied to function or closure
- #[inline = "2100"] type T = S;
+ #[inline] type T = S;
//~^ ERROR attribute should be applied to function or closure
- #[inline = "2100"] impl S { }
+ #[inline] impl S { }
//~^ ERROR attribute should be applied to function or closure
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-inline.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-inline.stderr
index 7eb0b5c..71e8f11 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-inline.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-inline.stderr
@@ -1,11 +1,21 @@
+warning: attribute must be of the form `#[inline]` or `#[inline(always|never)]`
+ --> $DIR/issue-43106-gating-of-inline.rs:17:5
+ |
+LL | #[inline = "2100"] fn f() { }
+ | ^^^^^^^^^^^^^^^^^^
+ |
+ = note: #[warn(ill_formed_attribute_input)] on by default
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:11:1
|
-LL | #[inline = "2100"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[inline]
+ | ^^^^^^^^^
LL | //~^ ERROR attribute should be applied to function or closure
LL | / mod inline {
-LL | | mod inner { #![inline="2100"] }
+LL | | mod inner { #![inline] }
LL | | //~^ ERROR attribute should be applied to function or closure
LL | |
... |
@@ -16,26 +26,26 @@
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43106-gating-of-inline.rs:14:17
|
-LL | mod inner { #![inline="2100"] }
- | ------------^^^^^^^^^^^^^^^^^-- not a function or closure
+LL | mod inner { #![inline] }
+ | ------------^^^^^^^^^^-- not a function or closure
error[E0518]: attribute should be applied to function or closure
- --> $DIR/issue-43106-gating-of-inline.rs:19:5
+ --> $DIR/issue-43106-gating-of-inline.rs:21:5
|
-LL | #[inline = "2100"] struct S;
- | ^^^^^^^^^^^^^^^^^^ --------- not a function or closure
+LL | #[inline] struct S;
+ | ^^^^^^^^^ --------- not a function or closure
error[E0518]: attribute should be applied to function or closure
- --> $DIR/issue-43106-gating-of-inline.rs:22:5
+ --> $DIR/issue-43106-gating-of-inline.rs:24:5
|
-LL | #[inline = "2100"] type T = S;
- | ^^^^^^^^^^^^^^^^^^ ----------- not a function or closure
+LL | #[inline] type T = S;
+ | ^^^^^^^^^ ----------- not a function or closure
error[E0518]: attribute should be applied to function or closure
- --> $DIR/issue-43106-gating-of-inline.rs:25:5
+ --> $DIR/issue-43106-gating-of-inline.rs:27:5
|
-LL | #[inline = "2100"] impl S { }
- | ^^^^^^^^^^^^^^^^^^ ---------- not a function or closure
+LL | #[inline] impl S { }
+ | ^^^^^^^^^ ---------- not a function or closure
error: aborting due to 5 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.rs b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.rs
index bb54c00..725f2e0 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.rs
@@ -3,21 +3,23 @@
// corresponds to cases where the attribute is currently unused, so we
// get that warning; see issue-43106-gating-of-builtin-attrs.rs
-#![macro_use = "4900"] //~ ERROR arguments to macro_use are not allowed here
+#![macro_use(my_macro)]
+//~^ ERROR arguments to macro_use are not allowed here
-#[macro_use = "2700"]
+#[macro_use(my_macro)]
//~^ ERROR arguments to macro_use are not allowed here
mod macro_escape {
- mod inner { #![macro_use="2700"] }
+ mod inner { #![macro_use(my_macro)] }
//~^ ERROR arguments to macro_use are not allowed here
- #[macro_use = "2700"] fn f() { }
-
#[macro_use = "2700"] struct S;
+ //~^ ERROR attribute must be of the form
- #[macro_use = "2700"] type T = S;
+ #[macro_use] fn f() { }
- #[macro_use = "2700"] impl S { }
+ #[macro_use] type T = S;
+
+ #[macro_use] impl S { }
}
fn main() { }
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr
index fb0e3b4..8074528 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-macro_use.stderr
@@ -1,20 +1,26 @@
error: arguments to macro_use are not allowed here
--> $DIR/issue-43106-gating-of-macro_use.rs:6:1
|
-LL | #![macro_use = "4900"] //~ ERROR arguments to macro_use are not allowed here
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![macro_use(my_macro)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^
error: arguments to macro_use are not allowed here
- --> $DIR/issue-43106-gating-of-macro_use.rs:8:1
+ --> $DIR/issue-43106-gating-of-macro_use.rs:9:1
|
-LL | #[macro_use = "2700"]
- | ^^^^^^^^^^^^^^^^^^^^^
+LL | #[macro_use(my_macro)]
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: arguments to macro_use are not allowed here
- --> $DIR/issue-43106-gating-of-macro_use.rs:11:17
+ --> $DIR/issue-43106-gating-of-macro_use.rs:12:17
|
-LL | mod inner { #![macro_use="2700"] }
- | ^^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![macro_use(my_macro)] }
+ | ^^^^^^^^^^^^^^^^^^^^^^^
-error: aborting due to 3 previous errors
+error: attribute must be of the form `#[macro_use]` or `#[macro_use(name1, name2, ...)]`
+ --> $DIR/issue-43106-gating-of-macro_use.rs:15:5
+ |
+LL | #[macro_use = "2700"] struct S;
+ | ^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.rs b/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.rs
index e2d0c26..a94ffd6 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.rs
@@ -7,27 +7,27 @@
// signal errors, making it incompatible with the "warnings only"
// nature of issue-43106-gating-of-builtin-attrs.rs
-#[proc_macro_derive = "2500"]
+#[proc_macro_derive()]
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
mod proc_macro_derive1 {
- mod inner { #![proc_macro_derive="2500"] }
+ mod inner { #![proc_macro_derive()] }
// (no error issued here if there was one on outer module)
}
mod proc_macro_derive2 {
- mod inner { #![proc_macro_derive="2500"] }
+ mod inner { #![proc_macro_derive()] }
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
- #[proc_macro_derive = "2500"] fn f() { }
+ #[proc_macro_derive()] fn f() { }
//~^ ERROR the `#[proc_macro_derive]` attribute is only usable with crates of the `proc-macro`
- #[proc_macro_derive = "2500"] struct S;
+ #[proc_macro_derive()] struct S;
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
- #[proc_macro_derive = "2500"] type T = S;
+ #[proc_macro_derive()] type T = S;
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
- #[proc_macro_derive = "2500"] impl S { }
+ #[proc_macro_derive()] impl S { }
//~^ ERROR the `#[proc_macro_derive]` attribute may only be used on bare functions
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.stderr
index aa841c3..e202b47 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-proc_macro_derive.stderr
@@ -1,38 +1,38 @@
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:10:1
|
-LL | #[proc_macro_derive = "2500"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()]
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:18:17
|
-LL | mod inner { #![proc_macro_derive="2500"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![proc_macro_derive()] }
+ | ^^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute is only usable with crates of the `proc-macro` crate type
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:21:5
|
-LL | #[proc_macro_derive = "2500"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()] fn f() { }
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:24:5
|
-LL | #[proc_macro_derive = "2500"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()] struct S;
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:27:5
|
-LL | #[proc_macro_derive = "2500"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()] type T = S;
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: the `#[proc_macro_derive]` attribute may only be used on bare functions
--> $DIR/issue-43106-gating-of-proc_macro_derive.rs:30:5
|
-LL | #[proc_macro_derive = "2500"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[proc_macro_derive()] impl S { }
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 6 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.rs b/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.rs
index b2fd6a7..60873f9 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.rs
@@ -4,25 +4,25 @@
// this test incompatible with the "warnings only" nature of
// issue-43106-gating-of-builtin-attrs.rs
-#![rustc_deprecated = "1500"]
+#![rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
-#[rustc_deprecated = "1500"]
+#[rustc_deprecated()]
//~^ ERROR stability attributes may not be used outside of the standard library
mod rustc_deprecated {
- mod inner { #![rustc_deprecated="1500"] }
+ mod inner { #![rustc_deprecated()] }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[rustc_deprecated = "1500"] fn f() { }
+ #[rustc_deprecated()] fn f() { }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[rustc_deprecated = "1500"] struct S;
+ #[rustc_deprecated()] struct S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[rustc_deprecated = "1500"] type T = S;
+ #[rustc_deprecated()] type T = S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[rustc_deprecated = "1500"] impl S { }
+ #[rustc_deprecated()] impl S { }
//~^ ERROR stability attributes may not be used outside of the standard library
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.stderr
index af056bc1..4eead36 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-rustc_deprecated.stderr
@@ -1,44 +1,44 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:7:1
|
-LL | #![rustc_deprecated = "1500"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![rustc_deprecated()]
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:10:1
|
-LL | #[rustc_deprecated = "1500"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()]
+ | ^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:13:17
|
-LL | mod inner { #![rustc_deprecated="1500"] }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![rustc_deprecated()] }
+ | ^^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:16:5
|
-LL | #[rustc_deprecated = "1500"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] fn f() { }
+ | ^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:19:5
|
-LL | #[rustc_deprecated = "1500"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] struct S;
+ | ^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:22:5
|
-LL | #[rustc_deprecated = "1500"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] type T = S;
+ | ^^^^^^^^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-rustc_deprecated.rs:25:5
|
-LL | #[rustc_deprecated = "1500"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] impl S { }
+ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 7 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-stable.rs b/src/test/ui/feature-gate/issue-43106-gating-of-stable.rs
index 7d9501a..e3ac274 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-stable.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-stable.rs
@@ -4,25 +4,25 @@
// this test incompatible with the "warnings only" nature of
// issue-43106-gating-of-builtin-attrs.rs
-#![stable = "1300"]
+#![stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
-#[stable = "1300"]
+#[stable()]
//~^ ERROR stability attributes may not be used outside of the standard library
mod stable {
- mod inner { #![stable="1300"] }
+ mod inner { #![stable()] }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[stable = "1300"] fn f() { }
+ #[stable()] fn f() { }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[stable = "1300"] struct S;
+ #[stable()] struct S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[stable = "1300"] type T = S;
+ #[stable()] type T = S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[stable = "1300"] impl S { }
+ #[stable()] impl S { }
//~^ ERROR stability attributes may not be used outside of the standard library
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-stable.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-stable.stderr
index 56066e8..03410ea 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-stable.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-stable.stderr
@@ -1,44 +1,44 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:7:1
|
-LL | #![stable = "1300"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![stable()]
+ | ^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:10:1
|
-LL | #[stable = "1300"]
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()]
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:13:17
|
-LL | mod inner { #![stable="1300"] }
- | ^^^^^^^^^^^^^^^^^
+LL | mod inner { #![stable()] }
+ | ^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:16:5
|
-LL | #[stable = "1300"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()] fn f() { }
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:19:5
|
-LL | #[stable = "1300"] struct S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()] struct S;
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:22:5
|
-LL | #[stable = "1300"] type T = S;
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()] type T = S;
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-stable.rs:25:5
|
-LL | #[stable = "1300"] impl S { }
- | ^^^^^^^^^^^^^^^^^^
+LL | #[stable()] impl S { }
+ | ^^^^^^^^^^^
error: aborting due to 7 previous errors
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-unstable.rs b/src/test/ui/feature-gate/issue-43106-gating-of-unstable.rs
index 8be55f0..8d519c3 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-unstable.rs
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-unstable.rs
@@ -4,25 +4,25 @@
// this test incompatible with the "warnings only" nature of
// issue-43106-gating-of-builtin-attrs.rs
-#![unstable = "1200"]
+#![unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
-#[unstable = "1200"]
+#[unstable()]
//~^ ERROR stability attributes may not be used outside of the standard library
mod unstable {
- mod inner { #![unstable="1200"] }
+ mod inner { #![unstable()] }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[unstable = "1200"] fn f() { }
+ #[unstable()] fn f() { }
//~^ ERROR stability attributes may not be used outside of the standard library
- #[unstable = "1200"] struct S;
+ #[unstable()] struct S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[unstable = "1200"] type T = S;
+ #[unstable()] type T = S;
//~^ ERROR stability attributes may not be used outside of the standard library
- #[unstable = "1200"] impl S { }
+ #[unstable()] impl S { }
//~^ ERROR stability attributes may not be used outside of the standard library
}
diff --git a/src/test/ui/feature-gate/issue-43106-gating-of-unstable.stderr b/src/test/ui/feature-gate/issue-43106-gating-of-unstable.stderr
index ee8b9d4..5952b38 100644
--- a/src/test/ui/feature-gate/issue-43106-gating-of-unstable.stderr
+++ b/src/test/ui/feature-gate/issue-43106-gating-of-unstable.stderr
@@ -1,44 +1,44 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:7:1
|
-LL | #![unstable = "1200"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL | #![unstable()]
+ | ^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:10:1
|
-LL | #[unstable = "1200"]
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()]
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:13:17
|
-LL | mod inner { #![unstable="1200"] }
- | ^^^^^^^^^^^^^^^^^^^
+LL | mod inner { #![unstable()] }
+ | ^^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:16:5
|
-LL | #[unstable = "1200"] fn f() { }
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()] fn f() { }
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:19:5
|
-LL | #[unstable = "1200"] struct S;
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()] struct S;
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:22:5
|
-LL | #[unstable = "1200"] type T = S;
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()] type T = S;
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/issue-43106-gating-of-unstable.rs:25:5
|
-LL | #[unstable = "1200"] impl S { }
- | ^^^^^^^^^^^^^^^^^^^^
+LL | #[unstable()] impl S { }
+ | ^^^^^^^^^^^^^
error: aborting due to 7 previous errors
diff --git a/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.rs b/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.rs
index 8997c18..c7d3304 100644
--- a/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.rs
+++ b/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.rs
@@ -1,13 +1,3 @@
-// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
enum Foo {
Bar(i32),
Baz { i: i32 },
diff --git a/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.stderr b/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.stderr
index cba643e..43535af 100644
--- a/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.stderr
+++ b/src/test/ui/feature-gates/feature-gate-type_alias_enum_variants.stderr
@@ -1,5 +1,5 @@
error: enum variants on type aliases are experimental
- --> $DIR/feature-gate-type_alias_enum_variants.rs:19:13
+ --> $DIR/feature-gate-type_alias_enum_variants.rs:9:13
|
LL | let t = Alias::Bar(0);
| ^^^^^^^^^^
@@ -7,7 +7,7 @@
= help: add `#![feature(type_alias_enum_variants)]` to the crate attributes to enable
error: enum variants on type aliases are experimental
- --> $DIR/feature-gate-type_alias_enum_variants.rs:21:13
+ --> $DIR/feature-gate-type_alias_enum_variants.rs:11:13
|
LL | let t = Alias::Baz { i: 0 };
| ^^^^^^^^^^
@@ -15,7 +15,7 @@
= help: add `#![feature(type_alias_enum_variants)]` to the crate attributes to enable
error: enum variants on type aliases are experimental
- --> $DIR/feature-gate-type_alias_enum_variants.rs:24:9
+ --> $DIR/feature-gate-type_alias_enum_variants.rs:14:9
|
LL | Alias::Bar(_i) => {}
| ^^^^^^^^^^^^^^
@@ -23,7 +23,7 @@
= help: add `#![feature(type_alias_enum_variants)]` to the crate attributes to enable
error: enum variants on type aliases are experimental
- --> $DIR/feature-gate-type_alias_enum_variants.rs:26:9
+ --> $DIR/feature-gate-type_alias_enum_variants.rs:16:9
|
LL | Alias::Baz { i: _i } => {}
| ^^^^^^^^^^
diff --git a/src/test/ui/feature-gates/feature-gate-unwind-attributes.rs b/src/test/ui/feature-gates/feature-gate-unwind-attributes.rs
index 6dda2c5..e0cb9c8 100644
--- a/src/test/ui/feature-gates/feature-gate-unwind-attributes.rs
+++ b/src/test/ui/feature-gates/feature-gate-unwind-attributes.rs
@@ -8,7 +8,7 @@
fn extern_fn();
// CHECK-NOT: Function Attrs: nounwind
// CHECK: declare void @unwinding_extern_fn
- #[unwind] //~ ERROR #[unwind] is experimental
+ #[unwind(allowed)] //~ ERROR #[unwind] is experimental
fn unwinding_extern_fn();
}
diff --git a/src/test/ui/feature-gates/feature-gate-unwind-attributes.stderr b/src/test/ui/feature-gates/feature-gate-unwind-attributes.stderr
index e558712..918d40d 100644
--- a/src/test/ui/feature-gates/feature-gate-unwind-attributes.stderr
+++ b/src/test/ui/feature-gates/feature-gate-unwind-attributes.stderr
@@ -1,8 +1,8 @@
error[E0658]: #[unwind] is experimental
--> $DIR/feature-gate-unwind-attributes.rs:11:5
|
-LL | #[unwind] //~ ERROR #[unwind] is experimental
- | ^^^^^^^^^
+LL | #[unwind(allowed)] //~ ERROR #[unwind] is experimental
+ | ^^^^^^^^^^^^^^^^^^
|
= help: add #![feature(unwind_attributes)] to the crate attributes to enable
diff --git a/src/test/ui/gated-bad-feature.rs b/src/test/ui/gated-bad-feature.rs
index 0782fe4..fb4cc94 100644
--- a/src/test/ui/gated-bad-feature.rs
+++ b/src/test/ui/gated-bad-feature.rs
@@ -6,8 +6,8 @@
//~^^^ ERROR: malformed feature
//~^^^ ERROR: malformed feature
-#![feature] //~ ERROR: malformed feature
-#![feature = "foo"] //~ ERROR: malformed feature
+#![feature] //~ ERROR: attribute must be of the form
+#![feature = "foo"] //~ ERROR: attribute must be of the form
#![feature(test_removed_feature)] //~ ERROR: feature has been removed
diff --git a/src/test/ui/gated-bad-feature.stderr b/src/test/ui/gated-bad-feature.stderr
index a8c35dd..141c516 100644
--- a/src/test/ui/gated-bad-feature.stderr
+++ b/src/test/ui/gated-bad-feature.stderr
@@ -10,25 +10,25 @@
LL | foo = "baz"
| ^^^^^^^^^^^
-error[E0555]: malformed feature attribute, expected #![feature(...)]
- --> $DIR/gated-bad-feature.rs:9:1
- |
-LL | #![feature] //~ ERROR: malformed feature
- | ^^^^^^^^^^^
-
-error[E0555]: malformed feature attribute, expected #![feature(...)]
- --> $DIR/gated-bad-feature.rs:10:1
- |
-LL | #![feature = "foo"] //~ ERROR: malformed feature
- | ^^^^^^^^^^^^^^^^^^^
-
error[E0557]: feature has been removed
--> $DIR/gated-bad-feature.rs:12:12
|
LL | #![feature(test_removed_feature)] //~ ERROR: feature has been removed
| ^^^^^^^^^^^^^^^^^^^^
+error: attribute must be of the form `#[feature(name1, name1, ...)]`
+ --> $DIR/gated-bad-feature.rs:9:1
+ |
+LL | #![feature] //~ ERROR: attribute must be of the form
+ | ^^^^^^^^^^^
+
+error: attribute must be of the form `#[feature(name1, name1, ...)]`
+ --> $DIR/gated-bad-feature.rs:10:1
+ |
+LL | #![feature = "foo"] //~ ERROR: attribute must be of the form
+ | ^^^^^^^^^^^^^^^^^^^
+
error: aborting due to 5 previous errors
-Some errors occurred: E0555, E0556, E0557.
-For more information about an error, try `rustc --explain E0555`.
+Some errors occurred: E0556, E0557.
+For more information about an error, try `rustc --explain E0556`.
diff --git a/src/test/ui/huge-enum.rs b/src/test/ui/huge-enum.rs
index 18ef457..71c8fd5 100644
--- a/src/test/ui/huge-enum.rs
+++ b/src/test/ui/huge-enum.rs
@@ -1,7 +1,5 @@
-// error-pattern: Option
-// normalize-stderr-test "<\[u32; \d+\]>" -> "<[u32; N]>"
-
-// FIXME: work properly with higher limits
+// normalize-stderr-test "std::option::Option<\[u32; \d+\]>" -> "TYPE"
+// normalize-stderr-test "\[u32; \d+\]" -> "TYPE"
#[cfg(target_pointer_width = "32")]
fn main() {
diff --git a/src/test/ui/huge-enum.stderr b/src/test/ui/huge-enum.stderr
index b7cf255..67cae3d 100644
--- a/src/test/ui/huge-enum.stderr
+++ b/src/test/ui/huge-enum.stderr
@@ -1,4 +1,4 @@
-error: the type `std::option::Option<[u32; N]>` is too big for the current architecture
+error: the type `TYPE` is too big for the current architecture
error: aborting due to previous error
diff --git a/src/test/ui/imports/issue-57539.rs b/src/test/ui/imports/issue-57539.rs
new file mode 100644
index 0000000..90b74eb
--- /dev/null
+++ b/src/test/ui/imports/issue-57539.rs
@@ -0,0 +1,8 @@
+// edition:2018
+
+mod core {
+ use core; //~ ERROR `core` is ambiguous
+ use crate::*;
+}
+
+fn main() {}
diff --git a/src/test/ui/imports/issue-57539.stderr b/src/test/ui/imports/issue-57539.stderr
new file mode 100644
index 0000000..3f745fd
--- /dev/null
+++ b/src/test/ui/imports/issue-57539.stderr
@@ -0,0 +1,18 @@
+error[E0659]: `core` is ambiguous (name vs any other name during import resolution)
+ --> $DIR/issue-57539.rs:4:9
+ |
+LL | use core; //~ ERROR `core` is ambiguous
+ | ^^^^ ambiguous name
+ |
+ = note: `core` could refer to a built-in extern crate
+ = help: use `::core` to refer to this extern crate unambiguously
+note: `core` could also refer to the module imported here
+ --> $DIR/issue-57539.rs:5:9
+ |
+LL | use crate::*;
+ | ^^^^^^^^
+ = help: use `self::core` to refer to this module unambiguously
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0659`.
diff --git a/src/test/ui/intrinsic-invalid-number-of-arguments.rs b/src/test/ui/intrinsic-invalid-number-of-arguments.rs
deleted file mode 100644
index 7823e7d..0000000
--- a/src/test/ui/intrinsic-invalid-number-of-arguments.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Test number of arguments in platform-specific intrinsic function
-// This is the error E0444
-
-#![feature(repr_simd, platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct f64x2(f64, f64);
-
-extern "platform-intrinsic" {
- fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ platform-specific intrinsic
-}
-
-pub fn main() {
-}
diff --git a/src/test/ui/intrinsic-invalid-number-of-arguments.stderr b/src/test/ui/intrinsic-invalid-number-of-arguments.stderr
deleted file mode 100644
index e2874d5..0000000
--- a/src/test/ui/intrinsic-invalid-number-of-arguments.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0444]: platform-specific intrinsic has invalid number of arguments: found 3, expected 1
- --> $DIR/intrinsic-invalid-number-of-arguments.rs:11:5
- |
-LL | fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ platform-specific intrinsic
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0444`.
diff --git a/src/test/ui/invalid_crate_type_syntax.rs b/src/test/ui/invalid_crate_type_syntax.rs
index eae4fad..8157ccd 100644
--- a/src/test/ui/invalid_crate_type_syntax.rs
+++ b/src/test/ui/invalid_crate_type_syntax.rs
@@ -1,5 +1,5 @@
// regression test for issue 16974
-#![crate_type(lib)] //~ ERROR `crate_type` requires a value
+#![crate_type(lib)] //~ ERROR attribute must be of the form
fn my_lib_fn() {}
diff --git a/src/test/ui/invalid_crate_type_syntax.stderr b/src/test/ui/invalid_crate_type_syntax.stderr
index 8494f71..8d6948b 100644
--- a/src/test/ui/invalid_crate_type_syntax.stderr
+++ b/src/test/ui/invalid_crate_type_syntax.stderr
@@ -1,10 +1,8 @@
-error: `crate_type` requires a value
+error: attribute must be of the form `#[crate_type = "bin|lib|..."]`
--> $DIR/invalid_crate_type_syntax.rs:2:1
|
-LL | #![crate_type(lib)] //~ ERROR `crate_type` requires a value
+LL | #![crate_type(lib)] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^
- |
- = note: for example: `#![crate_type="lib"]`
error: aborting due to previous error
diff --git a/src/test/ui/issue-53787-inline-assembler-macro.rs b/src/test/ui/issue-53787-inline-assembler-macro.rs
new file mode 100644
index 0000000..937bce1
--- /dev/null
+++ b/src/test/ui/issue-53787-inline-assembler-macro.rs
@@ -0,0 +1,23 @@
+// Regression test for Issue #53787: Fix ICE when creating a label in inline assembler with macros.
+
+#![feature(asm)]
+
+macro_rules! fake_jump {
+ ($id:expr) => {
+ unsafe {
+ asm!(
+ "
+ jmp $0
+ lea eax, [ebx]
+ xor eax, 0xDEADBEEF
+ retn
+ $0:
+ "::"0"($id)::"volatile", "intel");
+ }
+ };
+}
+
+fn main() {
+ fake_jump!("FirstFunc"); //~ ERROR invalid value for constraint in inline assembly
+ println!("Hello, world!");
+}
diff --git a/src/test/ui/issue-53787-inline-assembler-macro.stderr b/src/test/ui/issue-53787-inline-assembler-macro.stderr
new file mode 100644
index 0000000..69f380b
--- /dev/null
+++ b/src/test/ui/issue-53787-inline-assembler-macro.stderr
@@ -0,0 +1,9 @@
+error[E0669]: invalid value for constraint in inline assembly
+ --> $DIR/issue-53787-inline-assembler-macro.rs:21:16
+ |
+LL | fake_jump!("FirstFunc"); //~ ERROR invalid value for constraint in inline assembly
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0669`.
diff --git a/src/test/ui/issues/issue-20413.stderr b/src/test/ui/issues/issue-20413.stderr
index 20e5758..1c353fe 100644
--- a/src/test/ui/issues/issue-20413.stderr
+++ b/src/test/ui/issues/issue-20413.stderr
@@ -6,7 +6,7 @@
|
= help: consider removing `T` or using a marker such as `std::marker::PhantomData`
-error[E0275]: overflow evaluating the requirement `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: std::marker::Sized`
+error[E0275]: overflow evaluating the requirement `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: Foo`
--> $DIR/issue-20413.rs:8:1
|
LL | / impl<T> Foo for T where NoData<T>: Foo {
@@ -18,7 +18,6 @@
| |_^
|
= help: consider adding a `#![recursion_limit="128"]` attribute to your crate
- = note: required because of the requirements on the impl of `Foo` for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
= note: required because of the requirements on the impl of `Foo` for `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`
diff --git a/src/test/ui/issues/issue-43988.rs b/src/test/ui/issues/issue-43988.rs
index b2a2035..74667d7 100644
--- a/src/test/ui/issues/issue-43988.rs
+++ b/src/test/ui/issues/issue-43988.rs
@@ -24,8 +24,7 @@
#[repr]
let _y = "123";
//~^^ ERROR attribute should not be applied to a statement
- //~| WARN `repr` attribute must have a hint
-
+ //~| ERROR attribute must be of the form
fn foo() {}
@@ -35,5 +34,5 @@
let _z = #[repr] 1;
//~^ ERROR attribute should not be applied to an expression
- //~| WARN `repr` attribute must have a hint
+ //~| ERROR attribute must be of the form
}
diff --git a/src/test/ui/issues/issue-43988.stderr b/src/test/ui/issues/issue-43988.stderr
index 811816d..6fe41a3 100644
--- a/src/test/ui/issues/issue-43988.stderr
+++ b/src/test/ui/issues/issue-43988.stderr
@@ -1,21 +1,14 @@
-warning: `repr` attribute must have a hint
+error: attribute must be of the form `#[repr(C, packed, ...)]`
--> $DIR/issue-43988.rs:24:5
|
LL | #[repr]
- | ^^^^^^^ needs a hint
- |
- = note: #[warn(bad_repr)] on by default
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
+ | ^^^^^^^
-warning: `repr` attribute must have a hint
- --> $DIR/issue-43988.rs:36:14
+error: attribute must be of the form `#[repr(C, packed, ...)]`
+ --> $DIR/issue-43988.rs:35:14
|
LL | let _z = #[repr] 1;
- | ^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
+ | ^^^^^^^
error[E0518]: attribute should be applied to function or closure
--> $DIR/issue-43988.rs:5:5
@@ -60,7 +53,7 @@
| --------------- not a struct, enum or union
error[E0518]: attribute should be applied to function or closure
- --> $DIR/issue-43988.rs:32:5
+ --> $DIR/issue-43988.rs:31:5
|
LL | #[inline(ABC)]
| ^^^^^^^^^^^^^^
@@ -68,12 +61,12 @@
| ----- not a function or closure
error[E0517]: attribute should not be applied to an expression
- --> $DIR/issue-43988.rs:36:14
+ --> $DIR/issue-43988.rs:35:14
|
LL | let _z = #[repr] 1;
| ^^^^^^^ - not defining a struct, enum or union
-error: aborting due to 7 previous errors
+error: aborting due to 9 previous errors
Some errors occurred: E0517, E0518.
For more information about an error, try `rustc --explain E0517`.
diff --git a/src/test/ui/issues/issue-5067.rs b/src/test/ui/issues/issue-5067.rs
index 526a683..616fd09 100644
--- a/src/test/ui/issues/issue-5067.rs
+++ b/src/test/ui/issues/issue-5067.rs
@@ -1,37 +1,59 @@
#![allow(unused_macros)]
+// Tests that repetition matchers cannot match the empty token tree (since that would be
+// ambiguous).
+
+// edition:2018
+
macro_rules! foo {
( $()* ) => {};
//~^ ERROR repetition matches empty token tree
( $()+ ) => {};
//~^ ERROR repetition matches empty token tree
-
+ ( $()? ) => {};
+ //~^ ERROR repetition matches empty token tree
( $(),* ) => {}; // PASS
( $(),+ ) => {}; // PASS
-
+ // `?` cannot have a separator...
( [$()*] ) => {};
//~^ ERROR repetition matches empty token tree
( [$()+] ) => {};
//~^ ERROR repetition matches empty token tree
-
+ ( [$()?] ) => {};
+ //~^ ERROR repetition matches empty token tree
( [$(),*] ) => {}; // PASS
( [$(),+] ) => {}; // PASS
-
+ // `?` cannot have a separator...
( $($()* $(),* $(a)* $(a),* )* ) => {};
//~^ ERROR repetition matches empty token tree
( $($()* $(),* $(a)* $(a),* )+ ) => {};
//~^ ERROR repetition matches empty token tree
-
+ ( $($()* $(),* $(a)* $(a),* )? ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )* ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )+ ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $($()? $(),* $(a)? $(a),* )? ) => {};
+ //~^ ERROR repetition matches empty token tree
( $(a $(),* $(a)* $(a),* )* ) => {}; // PASS
( $($(a)+ $(),* $(a)* $(a),* )+ ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)* $(a),* )? ) => {}; // PASS
+
+ ( $(a $(),* $(a)? $(a),* )* ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)? $(a),* )+ ) => {}; // PASS
+ ( $($(a)+ $(),* $(a)? $(a),* )? ) => {}; // PASS
( $(a $()+)* ) => {};
//~^ ERROR repetition matches empty token tree
( $(a $()*)+ ) => {};
//~^ ERROR repetition matches empty token tree
+ ( $(a $()+)? ) => {};
+ //~^ ERROR repetition matches empty token tree
+ ( $(a $()?)+ ) => {};
+ //~^ ERROR repetition matches empty token tree
}
-
// --- Original Issue --- //
macro_rules! make_vec {
@@ -43,11 +65,10 @@
let _ = make_vec![a 1, a 2, a 3];
}
-
// --- Minified Issue --- //
macro_rules! m {
- ( $()* ) => {}
+ ( $()* ) => {};
//~^ ERROR repetition matches empty token tree
}
diff --git a/src/test/ui/issues/issue-5067.stderr b/src/test/ui/issues/issue-5067.stderr
index 433b7c8..7ffc607 100644
--- a/src/test/ui/issues/issue-5067.stderr
+++ b/src/test/ui/issues/issue-5067.stderr
@@ -1,62 +1,110 @@
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:4:8
+ --> $DIR/issue-5067.rs:9:8
|
LL | ( $()* ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:6:8
+ --> $DIR/issue-5067.rs:11:8
|
LL | ( $()+ ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:12:9
+ --> $DIR/issue-5067.rs:13:8
+ |
+LL | ( $()? ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:18:9
|
LL | ( [$()*] ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:14:9
+ --> $DIR/issue-5067.rs:20:9
|
LL | ( [$()+] ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:20:8
+ --> $DIR/issue-5067.rs:22:9
+ |
+LL | ( [$()?] ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:27:8
|
LL | ( $($()* $(),* $(a)* $(a),* )* ) => {};
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:22:8
+ --> $DIR/issue-5067.rs:29:8
|
LL | ( $($()* $(),* $(a)* $(a),* )+ ) => {};
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:28:12
+ --> $DIR/issue-5067.rs:31:8
+ |
+LL | ( $($()* $(),* $(a)* $(a),* )? ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:33:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )* ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:35:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )+ ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:37:8
+ |
+LL | ( $($()? $(),* $(a)? $(a),* )? ) => {};
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:47:12
|
LL | ( $(a $()+)* ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:30:12
+ --> $DIR/issue-5067.rs:49:12
|
LL | ( $(a $()*)+ ) => {};
| ^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:38:18
+ --> $DIR/issue-5067.rs:51:12
+ |
+LL | ( $(a $()+)? ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:53:12
+ |
+LL | ( $(a $()?)+ ) => {};
+ | ^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-5067.rs:60:18
|
LL | (a $e1:expr $($(, a $e2:expr)*)*) => ([$e1 $($(, $e2)*)*]);
| ^^^^^^^^^^^^^^^^^^
error: repetition matches empty token tree
- --> $DIR/issue-5067.rs:50:8
+ --> $DIR/issue-5067.rs:71:8
|
-LL | ( $()* ) => {}
+LL | ( $()* ) => {};
| ^^
-error: aborting due to 10 previous errors
+error: aborting due to 18 previous errors
diff --git a/src/test/ui/issues/issue-56488.rs b/src/test/ui/issues/issue-56488.rs
new file mode 100644
index 0000000..e2f3996
--- /dev/null
+++ b/src/test/ui/issues/issue-56488.rs
@@ -0,0 +1,13 @@
+// run-pass
+
+#![feature(trait_alias)]
+
+mod alpha {
+ pub trait A {}
+ pub trait C = A;
+}
+
+#[allow(unused_imports)]
+use alpha::C;
+
+fn main() {}
diff --git a/src/test/ui/issues/issue-57597.rs b/src/test/ui/issues/issue-57597.rs
new file mode 100644
index 0000000..ebeb3fe
--- /dev/null
+++ b/src/test/ui/issues/issue-57597.rs
@@ -0,0 +1,80 @@
+// Regression test for #57597.
+//
+// Make sure that nested matchers work correctly rather than causing an infinite loop or crash.
+
+// edition:2018
+
+macro_rules! foo1 {
+ ($($($i:ident)?)+) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo2 {
+ ($($($i:ident)?)*) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo3 {
+ ($($($i:ident)?)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo4 {
+ ($($($($i:ident)?)?)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo5 {
+ ($($($($i:ident)*)?)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo6 {
+ ($($($($i:ident)?)*)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo7 {
+ ($($($($i:ident)?)?)*) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo8 {
+ ($($($($i:ident)*)*)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo9 {
+ ($($($($i:ident)?)*)*) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo10 {
+ ($($($($i:ident)?)*)+) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo11 {
+ ($($($($i:ident)+)?)*) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+macro_rules! foo12 {
+ ($($($($i:ident)+)*)?) => {};
+ //~^ ERROR repetition matches empty token tree
+}
+
+fn main() {
+ foo1!();
+ foo2!();
+ foo3!();
+ foo4!();
+ foo5!();
+ foo6!();
+ foo7!();
+ foo8!();
+ foo9!();
+ foo10!();
+ foo11!();
+ foo12!();
+}
diff --git a/src/test/ui/issues/issue-57597.stderr b/src/test/ui/issues/issue-57597.stderr
new file mode 100644
index 0000000..0a02ac8
--- /dev/null
+++ b/src/test/ui/issues/issue-57597.stderr
@@ -0,0 +1,74 @@
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:8:7
+ |
+LL | ($($($i:ident)?)+) => {};
+ | ^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:13:7
+ |
+LL | ($($($i:ident)?)*) => {};
+ | ^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:18:7
+ |
+LL | ($($($i:ident)?)?) => {};
+ | ^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:23:7
+ |
+LL | ($($($($i:ident)?)?)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:28:7
+ |
+LL | ($($($($i:ident)*)?)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:33:7
+ |
+LL | ($($($($i:ident)?)*)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:38:7
+ |
+LL | ($($($($i:ident)?)?)*) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:43:7
+ |
+LL | ($($($($i:ident)*)*)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:48:7
+ |
+LL | ($($($($i:ident)?)*)*) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:53:7
+ |
+LL | ($($($($i:ident)?)*)+) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:58:7
+ |
+LL | ($($($($i:ident)+)?)*) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: repetition matches empty token tree
+ --> $DIR/issue-57597.rs:63:7
+ |
+LL | ($($($($i:ident)+)*)?) => {};
+ | ^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 12 previous errors
+
diff --git a/src/test/ui/lifetime-before-type-params.rs b/src/test/ui/lifetime-before-type-params.rs
new file mode 100644
index 0000000..9b905d4
--- /dev/null
+++ b/src/test/ui/lifetime-before-type-params.rs
@@ -0,0 +1,9 @@
+#![allow(unused)]
+fn first<T, 'a, 'b>() {}
+//~^ ERROR lifetime parameters must be declared prior to type parameters
+fn second<'a, T, 'b>() {}
+//~^ ERROR lifetime parameters must be declared prior to type parameters
+fn third<T, U, 'a>() {}
+//~^ ERROR lifetime parameters must be declared prior to type parameters
+fn fourth<'a, T, 'b, U, 'c, V>() {}
+//~^ ERROR lifetime parameters must be declared prior to type parameters
diff --git a/src/test/ui/lifetime-before-type-params.stderr b/src/test/ui/lifetime-before-type-params.stderr
new file mode 100644
index 0000000..7ac8dff
--- /dev/null
+++ b/src/test/ui/lifetime-before-type-params.stderr
@@ -0,0 +1,47 @@
+error: lifetime parameters must be declared prior to type parameters
+ --> $DIR/lifetime-before-type-params.rs:2:13
+ |
+LL | fn first<T, 'a, 'b>() {}
+ | ^^ ^^
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | fn first<'a, 'b, T>() {}
+ | ^^^ ^^^ --
+
+error: lifetime parameters must be declared prior to type parameters
+ --> $DIR/lifetime-before-type-params.rs:4:18
+ |
+LL | fn second<'a, T, 'b>() {}
+ | ^^
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | fn second<'a, 'b, T>() {}
+ | ^^^ --
+
+error: lifetime parameters must be declared prior to type parameters
+ --> $DIR/lifetime-before-type-params.rs:6:16
+ |
+LL | fn third<T, U, 'a>() {}
+ | ^^
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | fn third<'a, T, U>() {}
+ | ^^^ --
+
+error: lifetime parameters must be declared prior to type parameters
+ --> $DIR/lifetime-before-type-params.rs:8:18
+ |
+LL | fn fourth<'a, T, 'b, U, 'c, V>() {}
+ | ^^ ^^
+help: move the lifetime parameter prior to the first type parameter
+ |
+LL | fn fourth<'a, 'b, 'c, T, U, V>() {}
+ | ^^^ ^^^ -- --
+
+error[E0601]: `main` function not found in crate `lifetime_before_type_params`
+ |
+ = note: consider adding a `main` function to `$DIR/lifetime-before-type-params.rs`
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0601`.
diff --git a/src/test/ui/lint/lint-forbid-internal-unsafe.rs b/src/test/ui/lint/lint-forbid-internal-unsafe.rs
new file mode 100644
index 0000000..b08fbf6
--- /dev/null
+++ b/src/test/ui/lint/lint-forbid-internal-unsafe.rs
@@ -0,0 +1,16 @@
+#![forbid(unsafe_code)]
+#![feature(allow_internal_unsafe)]
+
+#[allow_internal_unsafe]
+//~^ ERROR: `allow_internal_unsafe` allows defining
+macro_rules! evil {
+ ($e:expr) => {
+ unsafe {
+ $e
+ }
+ }
+}
+
+fn main() {
+ println!("{}", evil!(*(0 as *const u8)));
+}
diff --git a/src/test/ui/lint/lint-forbid-internal-unsafe.stderr b/src/test/ui/lint/lint-forbid-internal-unsafe.stderr
new file mode 100644
index 0000000..59dab11
--- /dev/null
+++ b/src/test/ui/lint/lint-forbid-internal-unsafe.stderr
@@ -0,0 +1,14 @@
+error: `allow_internal_unsafe` allows defining macros using unsafe without triggering the `unsafe_code` lint at their call site
+ --> $DIR/lint-forbid-internal-unsafe.rs:4:1
+ |
+LL | #[allow_internal_unsafe]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+note: lint level defined here
+ --> $DIR/lint-forbid-internal-unsafe.rs:1:11
+ |
+LL | #![forbid(unsafe_code)]
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/lint/lint-incoherent-auto-trait-objects.rs b/src/test/ui/lint/lint-incoherent-auto-trait-objects.rs
new file mode 100644
index 0000000..0d18965
--- /dev/null
+++ b/src/test/ui/lint/lint-incoherent-auto-trait-objects.rs
@@ -0,0 +1,21 @@
+// ignore-tidy-linelength
+
+trait Foo {}
+
+impl Foo for dyn Send {}
+
+impl Foo for dyn Send + Send {}
+//~^ ERROR conflicting implementations
+//~| hard error
+
+impl Foo for dyn Send + Sync {}
+
+impl Foo for dyn Sync + Send {}
+//~^ ERROR conflicting implementations
+//~| hard error
+
+impl Foo for dyn Send + Sync + Send {}
+//~^ ERROR conflicting implementations
+//~| hard error
+
+fn main() {}
diff --git a/src/test/ui/lint/lint-incoherent-auto-trait-objects.stderr b/src/test/ui/lint/lint-incoherent-auto-trait-objects.stderr
new file mode 100644
index 0000000..928c92e
--- /dev/null
+++ b/src/test/ui/lint/lint-incoherent-auto-trait-objects.stderr
@@ -0,0 +1,39 @@
+error: conflicting implementations of trait `Foo` for type `(dyn std::marker::Send + 'static)`: (E0119)
+ --> $DIR/lint-incoherent-auto-trait-objects.rs:7:1
+ |
+LL | impl Foo for dyn Send {}
+ | --------------------- first implementation here
+LL |
+LL | impl Foo for dyn Send + Send {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + 'static)`
+ |
+ = note: #[deny(order_dependent_trait_objects)] on by default
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #56484 <https://github.com/rust-lang/rust/issues/56484>
+
+error: conflicting implementations of trait `Foo` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119)
+ --> $DIR/lint-incoherent-auto-trait-objects.rs:13:1
+ |
+LL | impl Foo for dyn Send + Sync {}
+ | ---------------------------- first implementation here
+LL |
+LL | impl Foo for dyn Sync + Send {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)`
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #56484 <https://github.com/rust-lang/rust/issues/56484>
+
+error: conflicting implementations of trait `Foo` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119)
+ --> $DIR/lint-incoherent-auto-trait-objects.rs:17:1
+ |
+LL | impl Foo for dyn Sync + Send {}
+ | ---------------------------- first implementation here
+...
+LL | impl Foo for dyn Send + Sync + Send {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)`
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #56484 <https://github.com/rust-lang/rust/issues/56484>
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/lint/lint-malformed.rs b/src/test/ui/lint/lint-malformed.rs
index e923249..c97a432 100644
--- a/src/test/ui/lint/lint-malformed.rs
+++ b/src/test/ui/lint/lint-malformed.rs
@@ -1,4 +1,4 @@
-#![deny = "foo"] //~ ERROR malformed lint attribute
+#![deny = "foo"] //~ ERROR attribute must be of the form
#![allow(bar = "baz")] //~ ERROR malformed lint attribute
fn main() { }
diff --git a/src/test/ui/lint/lint-malformed.stderr b/src/test/ui/lint/lint-malformed.stderr
index 554b025..98a7cec 100644
--- a/src/test/ui/lint/lint-malformed.stderr
+++ b/src/test/ui/lint/lint-malformed.stderr
@@ -1,15 +1,15 @@
error[E0452]: malformed lint attribute
- --> $DIR/lint-malformed.rs:1:1
- |
-LL | #![deny = "foo"] //~ ERROR malformed lint attribute
- | ^^^^^^^^^^^^^^^^
-
-error[E0452]: malformed lint attribute
--> $DIR/lint-malformed.rs:2:10
|
LL | #![allow(bar = "baz")] //~ ERROR malformed lint attribute
| ^^^^^^^^^^^
+error: attribute must be of the form `#[deny(lint1, lint2, ..., /*opt*/ reason = "...")]`
+ --> $DIR/lint-malformed.rs:1:1
+ |
+LL | #![deny = "foo"] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^^
+
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0452`.
diff --git a/src/test/ui/liveness/liveness-dead.rs b/src/test/ui/liveness/liveness-dead.rs
index 7d420af..004663c 100644
--- a/src/test/ui/liveness/liveness-dead.rs
+++ b/src/test/ui/liveness/liveness-dead.rs
@@ -27,4 +27,13 @@
x = 4; //~ ERROR: value assigned to `x` is never read
}
+// #22630
+fn f6() {
+ let mut done = false;
+ while !done {
+ done = true; // no error
+ continue;
+ }
+}
+
fn main() {}
diff --git a/src/test/ui/macros/meta-item-absolute-path.rs b/src/test/ui/macros/meta-item-absolute-path.rs
new file mode 100644
index 0000000..14d23be
--- /dev/null
+++ b/src/test/ui/macros/meta-item-absolute-path.rs
@@ -0,0 +1,4 @@
+#[derive(::Absolute)] //~ ERROR failed to resolve
+struct S;
+
+fn main() {}
diff --git a/src/test/ui/macros/meta-item-absolute-path.stderr b/src/test/ui/macros/meta-item-absolute-path.stderr
new file mode 100644
index 0000000..31b0a27
--- /dev/null
+++ b/src/test/ui/macros/meta-item-absolute-path.stderr
@@ -0,0 +1,9 @@
+error[E0433]: failed to resolve: maybe a missing `extern crate Absolute;`?
+ --> $DIR/meta-item-absolute-path.rs:1:12
+ |
+LL | #[derive(::Absolute)] //~ ERROR failed to resolve
+ | ^^^^^^^^ maybe a missing `extern crate Absolute;`?
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0433`.
diff --git a/src/test/ui/malformed/malformed-derive-entry.rs b/src/test/ui/malformed/malformed-derive-entry.rs
index 2c8ebc4..74d2210 100644
--- a/src/test/ui/malformed/malformed-derive-entry.rs
+++ b/src/test/ui/malformed/malformed-derive-entry.rs
@@ -11,7 +11,7 @@
struct Test3;
#[derive]
-//~^ WARNING empty trait list
+//~^ ERROR attribute must be of the form
struct Test4;
fn main() {}
diff --git a/src/test/ui/malformed/malformed-derive-entry.stderr b/src/test/ui/malformed/malformed-derive-entry.stderr
index b347422..f546f74 100644
--- a/src/test/ui/malformed/malformed-derive-entry.stderr
+++ b/src/test/ui/malformed/malformed-derive-entry.stderr
@@ -16,11 +16,11 @@
LL | #[derive()]
| ^^^^^^^^^^^
-warning: empty trait list in `derive`
+error: attribute must be of the form `#[derive(Trait1, Trait2, ...)]`
--> $DIR/malformed-derive-entry.rs:13:1
|
LL | #[derive]
| ^^^^^^^^^
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
diff --git a/src/test/ui/malformed/malformed-plugin-1.rs b/src/test/ui/malformed/malformed-plugin-1.rs
index c5a251d..16e7a95 100644
--- a/src/test/ui/malformed/malformed-plugin-1.rs
+++ b/src/test/ui/malformed/malformed-plugin-1.rs
@@ -1,4 +1,4 @@
#![feature(plugin)]
-#![plugin] //~ ERROR malformed plugin attribute
+#![plugin] //~ ERROR attribute must be of the form
fn main() {}
diff --git a/src/test/ui/malformed/malformed-plugin-1.stderr b/src/test/ui/malformed/malformed-plugin-1.stderr
index 4124fd6..f42e66e 100644
--- a/src/test/ui/malformed/malformed-plugin-1.stderr
+++ b/src/test/ui/malformed/malformed-plugin-1.stderr
@@ -1,9 +1,8 @@
-error[E0498]: malformed plugin attribute
+error: attribute must be of the form `#[plugin(name|name(args))]`
--> $DIR/malformed-plugin-1.rs:2:1
|
-LL | #![plugin] //~ ERROR malformed plugin attribute
+LL | #![plugin] //~ ERROR attribute must be of the form
| ^^^^^^^^^^
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0498`.
diff --git a/src/test/ui/malformed/malformed-plugin-2.rs b/src/test/ui/malformed/malformed-plugin-2.rs
index 96a3138..70a1d7f 100644
--- a/src/test/ui/malformed/malformed-plugin-2.rs
+++ b/src/test/ui/malformed/malformed-plugin-2.rs
@@ -1,4 +1,4 @@
#![feature(plugin)]
-#![plugin="bleh"] //~ ERROR malformed plugin attribute
+#![plugin="bleh"] //~ ERROR attribute must be of the form
fn main() {}
diff --git a/src/test/ui/malformed/malformed-plugin-2.stderr b/src/test/ui/malformed/malformed-plugin-2.stderr
index 308db46..923cbc1 100644
--- a/src/test/ui/malformed/malformed-plugin-2.stderr
+++ b/src/test/ui/malformed/malformed-plugin-2.stderr
@@ -1,9 +1,8 @@
-error[E0498]: malformed plugin attribute
+error: attribute must be of the form `#[plugin(name|name(args))]`
--> $DIR/malformed-plugin-2.rs:2:1
|
-LL | #![plugin="bleh"] //~ ERROR malformed plugin attribute
+LL | #![plugin="bleh"] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0498`.
diff --git a/src/test/ui/malformed/malformed-regressions.rs b/src/test/ui/malformed/malformed-regressions.rs
new file mode 100644
index 0000000..b5c9924
--- /dev/null
+++ b/src/test/ui/malformed/malformed-regressions.rs
@@ -0,0 +1,8 @@
+// compile-pass
+
+#[doc] //~ WARN attribute must be of the form
+#[ignore()] //~ WARN attribute must be of the form
+#[inline = ""] //~ WARN attribute must be of the form
+#[link] //~ WARN attribute must be of the form
+#[link = ""] //~ WARN attribute must be of the form
+fn main() {}
diff --git a/src/test/ui/malformed/malformed-regressions.stderr b/src/test/ui/malformed/malformed-regressions.stderr
new file mode 100644
index 0000000..a3b2bda
--- /dev/null
+++ b/src/test/ui/malformed/malformed-regressions.stderr
@@ -0,0 +1,48 @@
+warning: attribute must be of the form `#[doc(hidden|inline|...)]` or `#[doc = "string"]`
+ --> $DIR/malformed-regressions.rs:3:1
+ |
+LL | #[doc] //~ WARN attribute must be of the form
+ | ^^^^^^
+ |
+ = note: #[warn(ill_formed_attribute_input)] on by default
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
+warning: attribute must be of the form `#[ignore]` or `#[ignore = "reason"]`
+ --> $DIR/malformed-regressions.rs:4:1
+ |
+LL | #[ignore()] //~ WARN attribute must be of the form
+ | ^^^^^^^^^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
+warning: attribute must be of the form `#[inline]` or `#[inline(always|never)]`
+ --> $DIR/malformed-regressions.rs:5:1
+ |
+LL | #[inline = ""] //~ WARN attribute must be of the form
+ | ^^^^^^^^^^^^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
+warning: attribute must be of the form `#[link(name = "...", /*opt*/ kind = "dylib|static|...",
+ /*opt*/ cfg = "...")]`
+ --> $DIR/malformed-regressions.rs:6:1
+ |
+LL | #[link] //~ WARN attribute must be of the form
+ | ^^^^^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
+warning: attribute must be of the form `#[link(name = "...", /*opt*/ kind = "dylib|static|...",
+ /*opt*/ cfg = "...")]`
+ --> $DIR/malformed-regressions.rs:7:1
+ |
+LL | #[link = ""] //~ WARN attribute must be of the form
+ | ^^^^^^^^^^^^
+ |
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57571 <https://github.com/rust-lang/rust/issues/57571>
+
diff --git a/src/test/ui/malformed/malformed-special-attrs.rs b/src/test/ui/malformed/malformed-special-attrs.rs
new file mode 100644
index 0000000..f91c6be
--- /dev/null
+++ b/src/test/ui/malformed/malformed-special-attrs.rs
@@ -0,0 +1,13 @@
+#[cfg_attr] //~ ERROR expected `(`, found `<eof>`
+struct S1;
+
+#[cfg_attr = ""] //~ ERROR expected `(`, found `=`
+struct S2;
+
+#[derive] //~ ERROR attribute must be of the form
+struct S3;
+
+#[derive = ""] //~ ERROR attribute must be of the form
+struct S4;
+
+fn main() {}
diff --git a/src/test/ui/malformed/malformed-special-attrs.stderr b/src/test/ui/malformed/malformed-special-attrs.stderr
new file mode 100644
index 0000000..1653aa1
--- /dev/null
+++ b/src/test/ui/malformed/malformed-special-attrs.stderr
@@ -0,0 +1,25 @@
+error: expected `(`, found `<eof>`
+
+error: expected `(`, found `=`
+ --> $DIR/malformed-special-attrs.rs:4:12
+ |
+LL | #[cfg_attr] //~ ERROR expected `(`, found `<eof>`
+ | - expected `(`
+...
+LL | #[cfg_attr = ""] //~ ERROR expected `(`, found `=`
+ | ^ unexpected token
+
+error: attribute must be of the form `#[derive(Trait1, Trait2, ...)]`
+ --> $DIR/malformed-special-attrs.rs:7:1
+ |
+LL | #[derive] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^
+
+error: attribute must be of the form `#[derive(Trait1, Trait2, ...)]`
+ --> $DIR/malformed-special-attrs.rs:10:1
+ |
+LL | #[derive = ""] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
+
diff --git a/src/test/ui/marker_trait_attr/marker-attribute-with-values.rs b/src/test/ui/marker_trait_attr/marker-attribute-with-values.rs
index 4756bb1..ea356d5 100644
--- a/src/test/ui/marker_trait_attr/marker-attribute-with-values.rs
+++ b/src/test/ui/marker_trait_attr/marker-attribute-with-values.rs
@@ -3,14 +3,14 @@
#[marker(always)]
trait Marker1 {}
-//~^^ ERROR attribute should be empty
+//~^^ ERROR attribute must be of the form
#[marker("never")]
trait Marker2 {}
-//~^^ ERROR attribute should be empty
+//~^^ ERROR attribute must be of the form
#[marker(key = value)]
trait Marker3 {}
-//~^^ ERROR attribute should be empty
+//~^^ ERROR expected unsuffixed literal or identifier, found value
fn main() {}
diff --git a/src/test/ui/marker_trait_attr/marker-attribute-with-values.stderr b/src/test/ui/marker_trait_attr/marker-attribute-with-values.stderr
index e7c1e90..c683b39 100644
--- a/src/test/ui/marker_trait_attr/marker-attribute-with-values.stderr
+++ b/src/test/ui/marker_trait_attr/marker-attribute-with-values.stderr
@@ -1,20 +1,20 @@
-error: attribute should be empty
+error: attribute must be of the form `#[marker]`
--> $DIR/marker-attribute-with-values.rs:4:1
|
LL | #[marker(always)]
| ^^^^^^^^^^^^^^^^^
-error: attribute should be empty
+error: attribute must be of the form `#[marker]`
--> $DIR/marker-attribute-with-values.rs:8:1
|
LL | #[marker("never")]
| ^^^^^^^^^^^^^^^^^^
-error: attribute should be empty
- --> $DIR/marker-attribute-with-values.rs:12:1
+error: expected unsuffixed literal or identifier, found value
+ --> $DIR/marker-attribute-with-values.rs:12:10
|
LL | #[marker(key = value)]
- | ^^^^^^^^^^^^^^^^^^^^^^
+ | ^^^
error: aborting due to 3 previous errors
diff --git a/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr b/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr
index 66f8791..8e40707 100644
--- a/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr
+++ b/src/test/ui/nll/closure-requirements/escape-argument-callee.stderr
@@ -9,7 +9,7 @@
for<'r, 's, 't0> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 'r)) mut &ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 's)) i32, &ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 't0)) i32))
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/escape-argument-callee.rs:26:45
|
LL | let mut closure = expect_sig(|p, y| *p = y);
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr
index 5594271..55e4573 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-fail-no-postdom.stderr
@@ -16,7 +16,7 @@
= note: late-bound region is '_#5r
= note: late-bound region is '_#6r
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/propagate-approximated-fail-no-postdom.rs:46:13
|
LL | |_outlives1, _outlives2, _outlives3, x, y| {
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs
index 7296bba..1c409a1 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.rs
@@ -41,10 +41,9 @@
#[rustc_regions]
fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
-
// Only works if 'x: 'y:
demand_y(x, y, x.get())
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
});
}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr
index a827b85..5863b9b 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-ref.stderr
@@ -3,10 +3,9 @@
|
LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
| _______________________________________________^
-LL | |
LL | | // Only works if 'x: 'y:
LL | | demand_y(x, y, x.get())
-LL | | //~^ ERROR unsatisfied lifetime constraints
+LL | | //~^ ERROR lifetime may not live long enough
LL | | });
| |_____^
|
@@ -24,17 +23,17 @@
|
LL | / fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
LL | | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
-LL | |
LL | | // Only works if 'x: 'y:
-... |
+LL | | demand_y(x, y, x.get())
+LL | | //~^ ERROR lifetime may not live long enough
LL | | });
LL | | }
| |_^
|
= note: defining type: DefId(0/0:6 ~ propagate_approximated_ref[317d]::supply[0]) with substs []
-error: unsatisfied lifetime constraints
- --> $DIR/propagate-approximated-ref.rs:46:9
+error: lifetime may not live long enough
+ --> $DIR/propagate-approximated-ref.rs:45:9
|
LL | fn supply<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
| -- -- lifetime `'b` defined here
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs b/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs
index eb6159c..233a5dc 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-val.rs
@@ -34,10 +34,9 @@
#[rustc_regions]
fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
-
// Only works if 'x: 'y:
demand_y(outlives1, outlives2, x.get())
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
});
}
diff --git a/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr b/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr
index 1f9d1d7..b6d9d85 100644
--- a/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-approximated-val.stderr
@@ -3,10 +3,9 @@
|
LL | establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
| _____________________________________________^
-LL | |
LL | | // Only works if 'x: 'y:
LL | | demand_y(outlives1, outlives2, x.get())
-LL | | //~^ ERROR unsatisfied lifetime constraints
+LL | | //~^ ERROR lifetime may not live long enough
LL | | });
| |_____^
|
@@ -24,17 +23,17 @@
|
LL | / fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
LL | | establish_relationships(cell_a, cell_b, |outlives1, outlives2, x, y| {
-LL | |
LL | | // Only works if 'x: 'y:
-... |
+LL | | demand_y(outlives1, outlives2, x.get())
+LL | | //~^ ERROR lifetime may not live long enough
LL | | });
LL | | }
| |_^
|
= note: defining type: DefId(0/0:6 ~ propagate_approximated_val[317d]::test[0]) with substs []
-error: unsatisfied lifetime constraints
- --> $DIR/propagate-approximated-val.rs:39:9
+error: lifetime may not live long enough
+ --> $DIR/propagate-approximated-val.rs:38:9
|
LL | fn test<'a, 'b>(cell_a: Cell<&'a u32>, cell_b: Cell<&'b u32>) {
| -- -- lifetime `'b` defined here
diff --git a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr
index 1a8988f..93eb93b 100644
--- a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-no-bounds.stderr
@@ -16,7 +16,7 @@
= note: late-bound region is '_#2r
= note: late-bound region is '_#3r
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/propagate-fail-to-approximate-longer-no-bounds.rs:37:9
|
LL | establish_relationships(&cell_a, &cell_b, |_outlives, x, y| {
diff --git a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr
index d0492bd..c7809de 100644
--- a/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr
+++ b/src/test/ui/nll/closure-requirements/propagate-fail-to-approximate-longer-wrong-bounds.stderr
@@ -16,7 +16,7 @@
= note: late-bound region is '_#3r
= note: late-bound region is '_#4r
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/propagate-fail-to-approximate-longer-wrong-bounds.rs:41:9
|
LL | establish_relationships(&cell_a, &cell_b, |_outlives1, _outlives2, x, y| {
diff --git a/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr b/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr
index 0bc0592..d0a24a2 100644
--- a/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr
+++ b/src/test/ui/nll/closure-requirements/region-lbr-named-does-not-outlive-static.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/region-lbr-named-does-not-outlive-static.rs:9:5
|
LL | fn foo<'a>(x: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs
index 1be27ae..4d864c6 100644
--- a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs
+++ b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.rs
@@ -7,7 +7,7 @@
fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
&*x
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
-fn main() { }
+fn main() {}
diff --git a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr
index 2332332..6dc98a9 100644
--- a/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr
+++ b/src/test/ui/nll/closure-requirements/region-lbr1-does-not-outlive-ebr2.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/region-lbr1-does-not-outlive-ebr2.rs:9:5
|
LL | fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
diff --git a/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr b/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr
index 26243f9..4a035d0 100644
--- a/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr
+++ b/src/test/ui/nll/closure-requirements/return-wrong-bound-region.stderr
@@ -9,7 +9,7 @@
for<'r, 's> extern "rust-call" fn((&ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 'r)) i32, &ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 's)) i32)) -> &ReLateBound(DebruijnIndex(0), BrNamed(crate0:DefIndex(0:0), 'r)) i32
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/return-wrong-bound-region.rs:11:23
|
LL | expect_sig(|a, b| b); // ought to return `a`
diff --git a/src/test/ui/nll/issue-48238.stderr b/src/test/ui/nll/issue-48238.stderr
index 913effa..7cb5eb7 100644
--- a/src/test/ui/nll/issue-48238.stderr
+++ b/src/test/ui/nll/issue-48238.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-48238.rs:11:13
|
LL | move || use_val(&orig); //~ ERROR
diff --git a/src/test/ui/nll/issue-50716.stderr b/src/test/ui/nll/issue-50716.stderr
index fa893df..229bb17 100644
--- a/src/test/ui/nll/issue-50716.stderr
+++ b/src/test/ui/nll/issue-50716.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-50716.rs:16:14
|
LL | fn foo<'a, T: 'static>(s: Box<<&'a T as A>::X>)
diff --git a/src/test/ui/nll/issue-52113.rs b/src/test/ui/nll/issue-52113.rs
index 8428e55..795f4f4 100644
--- a/src/test/ui/nll/issue-52113.rs
+++ b/src/test/ui/nll/issue-52113.rs
@@ -3,8 +3,8 @@
#![allow(warnings)]
#![feature(nll)]
-trait Bazinga { }
-impl<F> Bazinga for F { }
+trait Bazinga {}
+impl<F> Bazinga for F {}
fn produce1<'a>(data: &'a u32) -> impl Bazinga + 'a {
let x = move || {
@@ -21,7 +21,6 @@
x
}
-
fn produce3<'a, 'b: 'a>(data: &'a mut Vec<&'a u32>, value: &'b u32) -> impl Bazinga + 'a {
let x = move || {
let value: &'a u32 = value;
@@ -35,7 +34,7 @@
let value: &'a u32 = value;
data.push(value);
};
- x //~ ERROR unsatisfied lifetime constraints
+ x //~ ERROR lifetime may not live long enough
}
-fn main() { }
+fn main() {}
diff --git a/src/test/ui/nll/issue-52113.stderr b/src/test/ui/nll/issue-52113.stderr
index 873612d..ceae161 100644
--- a/src/test/ui/nll/issue-52113.stderr
+++ b/src/test/ui/nll/issue-52113.stderr
@@ -1,12 +1,12 @@
-error: unsatisfied lifetime constraints
- --> $DIR/issue-52113.rs:38:5
+error: lifetime may not live long enough
+ --> $DIR/issue-52113.rs:37:5
|
LL | fn produce_err<'a, 'b: 'a>(data: &'b mut Vec<&'b u32>, value: &'a u32) -> impl Bazinga + 'b {
| -- -- lifetime `'b` defined here
| |
| lifetime `'a` defined here
...
-LL | x //~ ERROR unsatisfied lifetime constraints
+LL | x //~ ERROR lifetime may not live long enough
| ^ returning this value requires that `'a` must outlive `'b`
error: aborting due to previous error
diff --git a/src/test/ui/nll/issue-52742.rs b/src/test/ui/nll/issue-52742.rs
index d8251cb..150e67f 100644
--- a/src/test/ui/nll/issue-52742.rs
+++ b/src/test/ui/nll/issue-52742.rs
@@ -7,14 +7,14 @@
}
struct Bar<'b> {
- z: &'b u32
+ z: &'b u32,
}
impl Foo<'_, '_> {
fn take_bar(&mut self, b: Bar<'_>) {
self.y = b.z
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
}
-fn main() { }
+fn main() {}
diff --git a/src/test/ui/nll/issue-52742.stderr b/src/test/ui/nll/issue-52742.stderr
index f733702..6b25296 100644
--- a/src/test/ui/nll/issue-52742.stderr
+++ b/src/test/ui/nll/issue-52742.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-52742.rs:15:9
|
LL | fn take_bar(&mut self, b: Bar<'_>) {
diff --git a/src/test/ui/nll/issue-55394.rs b/src/test/ui/nll/issue-55394.rs
index 4a83c33..deb1034 100644
--- a/src/test/ui/nll/issue-55394.rs
+++ b/src/test/ui/nll/issue-55394.rs
@@ -8,7 +8,7 @@
impl Foo<'_> {
fn new(bar: &mut Bar) -> Self {
- Foo { bar } //~ ERROR unsatisfied lifetime constraints
+ Foo { bar } //~ERROR lifetime may not live long enough
}
}
diff --git a/src/test/ui/nll/issue-55394.stderr b/src/test/ui/nll/issue-55394.stderr
index a4c5160..bcdd782 100644
--- a/src/test/ui/nll/issue-55394.stderr
+++ b/src/test/ui/nll/issue-55394.stderr
@@ -1,11 +1,11 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-55394.rs:11:9
|
LL | fn new(bar: &mut Bar) -> Self {
| - ---- return type is Foo<'2>
| |
| let's call the lifetime of this reference `'1`
-LL | Foo { bar } //~ ERROR unsatisfied lifetime constraints
+LL | Foo { bar } //~ERROR lifetime may not live long enough
| ^^^^^^^^^^^ returning this value requires that `'1` must outlive `'2`
error: aborting due to previous error
diff --git a/src/test/ui/nll/issue-55401.stderr b/src/test/ui/nll/issue-55401.stderr
index 9e50db7..952b544 100644
--- a/src/test/ui/nll/issue-55401.stderr
+++ b/src/test/ui/nll/issue-55401.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-55401.rs:5:5
|
LL | fn static_to_a_to_static_through_ref_in_tuple<'a>(x: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/mir_check_cast_closure.rs b/src/test/ui/nll/mir_check_cast_closure.rs
index 5298e84..0619ff3 100644
--- a/src/test/ui/nll/mir_check_cast_closure.rs
+++ b/src/test/ui/nll/mir_check_cast_closure.rs
@@ -5,7 +5,7 @@
fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 {
let g: fn(_, _) -> _ = |_x, y| y;
g
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_closure.stderr b/src/test/ui/nll/mir_check_cast_closure.stderr
index b883533..e14cb07 100644
--- a/src/test/ui/nll/mir_check_cast_closure.stderr
+++ b/src/test/ui/nll/mir_check_cast_closure.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/mir_check_cast_closure.rs:7:5
|
LL | fn bar<'a, 'b>() -> fn(&'a u32, &'b u32) -> &'a u32 {
diff --git a/src/test/ui/nll/mir_check_cast_reify.rs b/src/test/ui/nll/mir_check_cast_reify.rs
index b0ad8e3..be12e31 100644
--- a/src/test/ui/nll/mir_check_cast_reify.rs
+++ b/src/test/ui/nll/mir_check_cast_reify.rs
@@ -35,7 +35,7 @@
// as part of checking the `ReifyFnPointer`.
let f: fn(_) -> _ = foo;
f(x)
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_reify.stderr b/src/test/ui/nll/mir_check_cast_reify.stderr
index 2585486..4e8eec3 100644
--- a/src/test/ui/nll/mir_check_cast_reify.stderr
+++ b/src/test/ui/nll/mir_check_cast_reify.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/mir_check_cast_reify.rs:37:5
|
LL | fn bar<'a>(x: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/mir_check_cast_unsafe_fn.rs b/src/test/ui/nll/mir_check_cast_unsafe_fn.rs
index 29fbf46..9df9c05 100644
--- a/src/test/ui/nll/mir_check_cast_unsafe_fn.rs
+++ b/src/test/ui/nll/mir_check_cast_unsafe_fn.rs
@@ -7,7 +7,7 @@
// in `g`. These are related via the `UnsafeFnPointer` cast.
let g: unsafe fn(_) -> _ = f;
unsafe { g(input) }
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr b/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr
index e7b945a..5295985 100644
--- a/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr
+++ b/src/test/ui/nll/mir_check_cast_unsafe_fn.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/mir_check_cast_unsafe_fn.rs:9:14
|
LL | fn bar<'a>(input: &'a u32, f: fn(&'a u32) -> &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/mir_check_cast_unsize.rs b/src/test/ui/nll/mir_check_cast_unsize.rs
index e98d5e1..d15c4e4 100644
--- a/src/test/ui/nll/mir_check_cast_unsize.rs
+++ b/src/test/ui/nll/mir_check_cast_unsize.rs
@@ -6,7 +6,7 @@
fn bar<'a>(x: &'a u32) -> &'static dyn Debug {
x
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/mir_check_cast_unsize.stderr b/src/test/ui/nll/mir_check_cast_unsize.stderr
index 189bb2d..364d6c1 100644
--- a/src/test/ui/nll/mir_check_cast_unsize.stderr
+++ b/src/test/ui/nll/mir_check_cast_unsize.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/mir_check_cast_unsize.rs:8:5
|
LL | fn bar<'a>(x: &'a u32) -> &'static dyn Debug {
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr b/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr
index f2bfdae..e8283d1 100644
--- a/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr
+++ b/src/test/ui/nll/ty-outlives/projection-one-region-closure.stderr
@@ -40,7 +40,7 @@
|
= help: consider adding an explicit lifetime bound `T: ReFree(DefId(0/0:8 ~ projection_one_region_closure[317d]::no_relationships_late[0]), BrNamed(crate0:DefIndex(1:16), 'a))`...
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-one-region-closure.rs:45:39
|
LL | fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
@@ -94,7 +94,7 @@
|
= help: consider adding an explicit lifetime bound `T: ReEarlyBound(0, 'a)`...
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-one-region-closure.rs:56:39
|
LL | fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
diff --git a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr b/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr
index fc59100..78a8c80 100644
--- a/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr
+++ b/src/test/ui/nll/ty-outlives/projection-one-region-trait-bound-closure.stderr
@@ -31,7 +31,7 @@
T
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-one-region-trait-bound-closure.rs:37:39
|
LL | fn no_relationships_late<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
@@ -76,7 +76,7 @@
T
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-one-region-trait-bound-closure.rs:47:39
|
LL | fn no_relationships_early<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
diff --git a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs
index 25877e6..20edfb3 100644
--- a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs
+++ b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.rs
@@ -85,7 +85,7 @@
T: Anything<'b, 'b>,
{
with_signature(cell, t, |cell, t| require(cell, t));
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
#[rustc_regions]
diff --git a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr
index c2b54b6..d8725dc 100644
--- a/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr
+++ b/src/test/ui/nll/ty-outlives/projection-two-region-trait-bound-closure.stderr
@@ -217,7 +217,7 @@
LL | | T: Anything<'b, 'b>,
LL | | {
LL | | with_signature(cell, t, |cell, t| require(cell, t));
-LL | | //~^ ERROR unsatisfied lifetime constraints
+LL | | //~^ ERROR lifetime may not live long enough
LL | | }
| |_^
|
@@ -226,7 +226,7 @@
T
]
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/projection-two-region-trait-bound-closure.rs:87:29
|
LL | fn two_regions<'a, 'b, T>(cell: Cell<&'a ()>, t: T)
diff --git a/src/test/ui/nll/type-alias-free-regions.stderr b/src/test/ui/nll/type-alias-free-regions.stderr
index 6b3bb60..bcd141b 100644
--- a/src/test/ui/nll/type-alias-free-regions.stderr
+++ b/src/test/ui/nll/type-alias-free-regions.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/type-alias-free-regions.rs:19:9
|
LL | impl<'a> FromBox<'a> for C<'a> {
@@ -8,7 +8,7 @@
LL | C { f: b } //~ ERROR
| ^^^^^^^^^^ returning this value requires that `'1` must outlive `'a`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/type-alias-free-regions.rs:29:9
|
LL | impl<'a> FromTuple<'a> for C<'a> {
diff --git a/src/test/ui/nll/user-annotations/closure-substs.rs b/src/test/ui/nll/user-annotations/closure-substs.rs
index 9dc84aa..cafdd92 100644
--- a/src/test/ui/nll/user-annotations/closure-substs.rs
+++ b/src/test/ui/nll/user-annotations/closure-substs.rs
@@ -5,21 +5,21 @@
fn foo<'a>() {
// Here `x` is free in the closure sig:
|x: &'a i32| -> &'static i32 {
- return x; //~ ERROR unsatisfied lifetime constraints
+ return x; //~ ERROR lifetime may not live long enough
};
}
fn foo1() {
// Here `x` is bound in the closure sig:
|x: &i32| -> &'static i32 {
- return x; //~ ERROR unsatisfied lifetime constraints
+ return x; //~ ERROR lifetime may not live long enough
};
}
fn bar<'a>() {
// Here `x` is free in the closure sig:
|x: &'a i32, b: fn(&'static i32)| {
- b(x); //~ ERROR unsatisfied lifetime constraints
+ b(x); //~ ERROR lifetime may not live long enough
};
}
@@ -30,4 +30,4 @@
};
}
-fn main() { }
+fn main() {}
diff --git a/src/test/ui/nll/user-annotations/closure-substs.stderr b/src/test/ui/nll/user-annotations/closure-substs.stderr
index ffc6e5a..a46ab61 100644
--- a/src/test/ui/nll/user-annotations/closure-substs.stderr
+++ b/src/test/ui/nll/user-annotations/closure-substs.stderr
@@ -1,27 +1,27 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/closure-substs.rs:8:16
|
LL | fn foo<'a>() {
| -- lifetime `'a` defined here
...
-LL | return x; //~ ERROR unsatisfied lifetime constraints
+LL | return x; //~ ERROR lifetime may not live long enough
| ^ returning this value requires that `'a` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/closure-substs.rs:15:16
|
LL | |x: &i32| -> &'static i32 {
| - let's call the lifetime of this reference `'1`
-LL | return x; //~ ERROR unsatisfied lifetime constraints
+LL | return x; //~ ERROR lifetime may not live long enough
| ^ returning this value requires that `'1` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/closure-substs.rs:22:9
|
LL | fn bar<'a>() {
| -- lifetime `'a` defined here
...
-LL | b(x); //~ ERROR unsatisfied lifetime constraints
+LL | b(x); //~ ERROR lifetime may not live long enough
| ^^^^ argument requires that `'a` must outlive `'static`
error[E0521]: borrowed data escapes outside of closure
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr
index 94fbe01..541a711 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-inherent-1.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-inherent-1.rs:10:5
|
LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr
index 7aeb276..5b97c12 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-normalize.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-normalize.rs:20:5
|
LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr
index fee9abc..10e48b5 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-1.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-trait-item-1.rs:12:5
|
LL | fn foo<'a>(_: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr
index 047aad9..5bfa32e 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-2.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-trait-item-2.rs:12:5
|
LL | fn foo<'a, T: Foo<'a>>() -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr
index b373ceb..a1e60db 100644
--- a/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr
+++ b/src/test/ui/nll/user-annotations/constant-in-expr-trait-item-3.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/constant-in-expr-trait-item-3.rs:12:5
|
LL | fn foo<'a, T: Foo<'a>>() -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/issue-54124.rs b/src/test/ui/nll/user-annotations/issue-54124.rs
index 042ad02..e1de67a 100644
--- a/src/test/ui/nll/user-annotations/issue-54124.rs
+++ b/src/test/ui/nll/user-annotations/issue-54124.rs
@@ -1,8 +1,8 @@
#![feature(nll)]
fn test<'a>() {
- let _:fn(&()) = |_:&'a ()| {}; //~ ERROR unsatisfied lifetime constraints
- //~^ ERROR unsatisfied lifetime constraints
+ let _:fn(&()) = |_:&'a ()| {}; //~ ERROR lifetime may not live long enough
+ //~^ ERROR lifetime may not live long enough
}
fn main() {
diff --git a/src/test/ui/nll/user-annotations/issue-54124.stderr b/src/test/ui/nll/user-annotations/issue-54124.stderr
index 5b5afaee..b1c2411 100644
--- a/src/test/ui/nll/user-annotations/issue-54124.stderr
+++ b/src/test/ui/nll/user-annotations/issue-54124.stderr
@@ -1,19 +1,19 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-54124.rs:4:22
|
LL | fn test<'a>() {
| -- lifetime `'a` defined here
-LL | let _:fn(&()) = |_:&'a ()| {}; //~ ERROR unsatisfied lifetime constraints
+LL | let _:fn(&()) = |_:&'a ()| {}; //~ ERROR lifetime may not live long enough
| ^ - let's call the lifetime of this reference `'1`
| |
| requires that `'1` must outlive `'a`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/issue-54124.rs:4:22
|
LL | fn test<'a>() {
| -- lifetime `'a` defined here
-LL | let _:fn(&()) = |_:&'a ()| {}; //~ ERROR unsatisfied lifetime constraints
+LL | let _:fn(&()) = |_:&'a ()| {}; //~ ERROR lifetime may not live long enough
| ^ requires that `'a` must outlive `'static`
error: aborting due to 2 previous errors
diff --git a/src/test/ui/nll/user-annotations/normalization.rs b/src/test/ui/nll/user-annotations/normalization.rs
index 51d9adc..e0af2e6 100644
--- a/src/test/ui/nll/user-annotations/normalization.rs
+++ b/src/test/ui/nll/user-annotations/normalization.rs
@@ -2,7 +2,6 @@
// after normalization.
#![feature(nll)]
-#![ignore(unused)]
trait Foo { type Out; }
impl Foo for () { type Out = &'static u32; }
diff --git a/src/test/ui/nll/user-annotations/normalization.stderr b/src/test/ui/nll/user-annotations/normalization.stderr
index b059d5a..71bf850 100644
--- a/src/test/ui/nll/user-annotations/normalization.stderr
+++ b/src/test/ui/nll/user-annotations/normalization.stderr
@@ -1,5 +1,5 @@
error[E0597]: `a` does not live long enough
- --> $DIR/normalization.rs:12:31
+ --> $DIR/normalization.rs:11:31
|
LL | let b: <() as Foo>::Out = &a; //~ ERROR
| ---------------- ^^ borrowed value does not live long enough
diff --git a/src/test/ui/nll/user-annotations/patterns.stderr b/src/test/ui/nll/user-annotations/patterns.stderr
index b0c554e..476578e 100644
--- a/src/test/ui/nll/user-annotations/patterns.stderr
+++ b/src/test/ui/nll/user-annotations/patterns.stderr
@@ -148,7 +148,7 @@
LL | }
| - `x` dropped here while still borrowed
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/patterns.rs:113:5
|
LL | fn static_to_a_to_static_through_variable<'a>(x: &'a u32) -> &'static u32 {
@@ -157,7 +157,7 @@
LL | y //~ ERROR
| ^ returning this value requires that `'a` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/patterns.rs:125:5
|
LL | fn static_to_a_to_static_through_tuple<'a>(x: &'a u32) -> &'static u32 {
@@ -166,7 +166,7 @@
LL | y //~ ERROR
| ^ returning this value requires that `'a` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/patterns.rs:130:5
|
LL | fn static_to_a_to_static_through_struct<'a>(_x: &'a u32) -> &'static u32 {
@@ -175,7 +175,7 @@
LL | y //~ ERROR
| ^ returning this value requires that `'a` must outlive `'static`
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/patterns.rs:134:18
|
LL | fn a_to_static_then_static<'a>(x: &'a u32) -> &'static u32 {
diff --git a/src/test/ui/nll/user-annotations/wf-self-type.rs b/src/test/ui/nll/user-annotations/wf-self-type.rs
index da9ef8c..d8caf46 100644
--- a/src/test/ui/nll/user-annotations/wf-self-type.rs
+++ b/src/test/ui/nll/user-annotations/wf-self-type.rs
@@ -9,7 +9,7 @@
}
pub fn foo<'a, 'b>(u: &'b ()) -> &'a () {
- Foo::xmute(u) //~ ERROR unsatisfied lifetime constraints
+ Foo::xmute(u) //~ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/user-annotations/wf-self-type.stderr b/src/test/ui/nll/user-annotations/wf-self-type.stderr
index 401fe2a..00500c8 100644
--- a/src/test/ui/nll/user-annotations/wf-self-type.stderr
+++ b/src/test/ui/nll/user-annotations/wf-self-type.stderr
@@ -1,11 +1,11 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/wf-self-type.rs:12:5
|
LL | pub fn foo<'a, 'b>(u: &'b ()) -> &'a () {
| -- -- lifetime `'b` defined here
| |
| lifetime `'a` defined here
-LL | Foo::xmute(u) //~ ERROR unsatisfied lifetime constraints
+LL | Foo::xmute(u) //~ ERROR lifetime may not live long enough
| ^^^^^^^^^^^^^ returning this value requires that `'b` must outlive `'a`
error: aborting due to previous error
diff --git a/src/test/ui/nll/where_clauses_in_functions.rs b/src/test/ui/nll/where_clauses_in_functions.rs
index 256ec60..0d35c09 100644
--- a/src/test/ui/nll/where_clauses_in_functions.rs
+++ b/src/test/ui/nll/where_clauses_in_functions.rs
@@ -11,7 +11,7 @@
fn bar<'a, 'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32) {
foo(x, y)
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/where_clauses_in_functions.stderr b/src/test/ui/nll/where_clauses_in_functions.stderr
index 4419a19..f3b65ec 100644
--- a/src/test/ui/nll/where_clauses_in_functions.stderr
+++ b/src/test/ui/nll/where_clauses_in_functions.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/where_clauses_in_functions.rs:13:5
|
LL | fn bar<'a, 'b>(x: &'a u32, y: &'b u32) -> (&'a u32, &'b u32) {
diff --git a/src/test/ui/nll/where_clauses_in_structs.rs b/src/test/ui/nll/where_clauses_in_structs.rs
index 1b02f26..8bc6b2e 100644
--- a/src/test/ui/nll/where_clauses_in_structs.rs
+++ b/src/test/ui/nll/where_clauses_in_structs.rs
@@ -11,7 +11,7 @@
fn bar<'a, 'b>(x: Cell<&'a u32>, y: Cell<&'b u32>) {
Foo { x, y };
- //~^ ERROR unsatisfied lifetime constraints
+ //~^ ERROR lifetime may not live long enough
}
fn main() {}
diff --git a/src/test/ui/nll/where_clauses_in_structs.stderr b/src/test/ui/nll/where_clauses_in_structs.stderr
index 8704b0dc..e0feb40 100644
--- a/src/test/ui/nll/where_clauses_in_structs.stderr
+++ b/src/test/ui/nll/where_clauses_in_structs.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/where_clauses_in_structs.rs:13:11
|
LL | fn bar<'a, 'b>(x: Cell<&'a u32>, y: Cell<&'b u32>) {
diff --git a/src/test/ui/no_crate_type.rs b/src/test/ui/no_crate_type.rs
index 43efdac..392c6fd 100644
--- a/src/test/ui/no_crate_type.rs
+++ b/src/test/ui/no_crate_type.rs
@@ -1,5 +1,5 @@
// regression test for issue 11256
-#![crate_type] //~ ERROR `crate_type` requires a value
+#![crate_type] //~ ERROR attribute must be of the form
fn main() {
return
diff --git a/src/test/ui/no_crate_type.stderr b/src/test/ui/no_crate_type.stderr
index 9d691f3..6b76ab6 100644
--- a/src/test/ui/no_crate_type.stderr
+++ b/src/test/ui/no_crate_type.stderr
@@ -1,10 +1,8 @@
-error: `crate_type` requires a value
+error: attribute must be of the form `#[crate_type = "bin|lib|..."]`
--> $DIR/no_crate_type.rs:2:1
|
-LL | #![crate_type] //~ ERROR `crate_type` requires a value
+LL | #![crate_type] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^
- |
- = note: for example: `#![crate_type="lib"]`
error: aborting due to previous error
diff --git a/src/test/ui/on-unimplemented/bad-annotation.rs b/src/test/ui/on-unimplemented/bad-annotation.rs
index e5e921c..6843c4b 100644
--- a/src/test/ui/on-unimplemented/bad-annotation.rs
+++ b/src/test/ui/on-unimplemented/bad-annotation.rs
@@ -14,7 +14,8 @@
fn my_from_iter<T: Iterator<Item=A>>(iterator: T) -> Self;
}
-#[rustc_on_unimplemented] //~ ERROR `#[rustc_on_unimplemented]` requires a value
+#[rustc_on_unimplemented]
+//~^ ERROR attribute must be of the form
trait BadAnnotation1
{}
diff --git a/src/test/ui/on-unimplemented/bad-annotation.stderr b/src/test/ui/on-unimplemented/bad-annotation.stderr
index 70f6932..31b626e 100644
--- a/src/test/ui/on-unimplemented/bad-annotation.stderr
+++ b/src/test/ui/on-unimplemented/bad-annotation.stderr
@@ -1,25 +1,23 @@
-error[E0232]: `#[rustc_on_unimplemented]` requires a value
+error: attribute must be of the form `#[rustc_on_unimplemented(/*opt*/ message = "...", /*opt*/ label = "...", /*opt*/ note = "...")]` or `#[rustc_on_unimplemented = "message"]`
--> $DIR/bad-annotation.rs:17:1
|
-LL | #[rustc_on_unimplemented] //~ ERROR `#[rustc_on_unimplemented]` requires a value
- | ^^^^^^^^^^^^^^^^^^^^^^^^^ value required here
- |
- = note: eg `#[rustc_on_unimplemented(message="foo")]`
+LL | #[rustc_on_unimplemented]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0230]: there is no parameter `C` on trait `BadAnnotation2`
- --> $DIR/bad-annotation.rs:21:1
+ --> $DIR/bad-annotation.rs:22:1
|
LL | #[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{C}>`"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0231]: only named substitution parameters are allowed
- --> $DIR/bad-annotation.rs:26:1
+ --> $DIR/bad-annotation.rs:27:1
|
LL | #[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{}>`"]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:31:26
+ --> $DIR/bad-annotation.rs:32:26
|
LL | #[rustc_on_unimplemented(lorem="")]
| ^^^^^^^^ expected value here
@@ -27,7 +25,7 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:35:26
+ --> $DIR/bad-annotation.rs:36:26
|
LL | #[rustc_on_unimplemented(lorem(ipsum(dolor)))]
| ^^^^^^^^^^^^^^^^^^^ expected value here
@@ -35,7 +33,7 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:39:39
+ --> $DIR/bad-annotation.rs:40:39
|
LL | #[rustc_on_unimplemented(message="x", message="y")]
| ^^^^^^^^^^^ expected value here
@@ -43,7 +41,7 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:43:39
+ --> $DIR/bad-annotation.rs:44:39
|
LL | #[rustc_on_unimplemented(message="x", on(desugared, message="y"))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
@@ -51,13 +49,13 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: empty `on`-clause in `#[rustc_on_unimplemented]`
- --> $DIR/bad-annotation.rs:47:26
+ --> $DIR/bad-annotation.rs:48:26
|
LL | #[rustc_on_unimplemented(on(), message="y")]
| ^^^^ empty on-clause here
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:51:26
+ --> $DIR/bad-annotation.rs:52:26
|
LL | #[rustc_on_unimplemented(on="x", message="y")]
| ^^^^^^ expected value here
@@ -65,7 +63,7 @@
= note: eg `#[rustc_on_unimplemented(message="foo")]`
error[E0232]: this attribute must have a valid value
- --> $DIR/bad-annotation.rs:58:40
+ --> $DIR/bad-annotation.rs:59:40
|
LL | #[rustc_on_unimplemented(on(desugared, on(desugared, message="x")), message="y")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
diff --git a/src/test/ui/on-unimplemented/expected-comma-found-token.rs b/src/test/ui/on-unimplemented/expected-comma-found-token.rs
index a4e2a17..d8717f3 100644
--- a/src/test/ui/on-unimplemented/expected-comma-found-token.rs
+++ b/src/test/ui/on-unimplemented/expected-comma-found-token.rs
@@ -4,7 +4,7 @@
#![feature(on_unimplemented)]
-#[rustc_on_unimplemented( //~ ERROR `#[rustc_on_unimplemented]` requires a value
+#[rustc_on_unimplemented(
message="the message"
label="the label" //~ ERROR expected one of `)` or `,`, found `label`
)]
diff --git a/src/test/ui/on-unimplemented/expected-comma-found-token.stderr b/src/test/ui/on-unimplemented/expected-comma-found-token.stderr
index aa1b520..1e0808e 100644
--- a/src/test/ui/on-unimplemented/expected-comma-found-token.stderr
+++ b/src/test/ui/on-unimplemented/expected-comma-found-token.stderr
@@ -6,17 +6,5 @@
LL | label="the label" //~ ERROR expected one of `)` or `,`, found `label`
| ^^^^^ unexpected token
-error[E0232]: `#[rustc_on_unimplemented]` requires a value
- --> $DIR/expected-comma-found-token.rs:7:1
- |
-LL | / #[rustc_on_unimplemented( //~ ERROR `#[rustc_on_unimplemented]` requires a value
-LL | | message="the message"
-LL | | label="the label" //~ ERROR expected one of `)` or `,`, found `label`
-LL | | )]
- | |__^ value required here
- |
- = note: eg `#[rustc_on_unimplemented(message="foo")]`
+error: aborting due to previous error
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0232`.
diff --git a/src/test/ui/parser/attr.rs b/src/test/ui/parser/attr.rs
index 041f30c..91a4abb 100644
--- a/src/test/ui/parser/attr.rs
+++ b/src/test/ui/parser/attr.rs
@@ -2,5 +2,6 @@
fn main() {}
-#![lang(foo)] //~ ERROR an inner attribute is not permitted in this context
+#![lang = "foo"] //~ ERROR an inner attribute is not permitted in this context
+ //~| ERROR definition of an unknown language item: `foo`
fn foo() {}
diff --git a/src/test/ui/parser/attr.stderr b/src/test/ui/parser/attr.stderr
index 44714dc..8151bd7 100644
--- a/src/test/ui/parser/attr.stderr
+++ b/src/test/ui/parser/attr.stderr
@@ -1,10 +1,17 @@
error: an inner attribute is not permitted in this context
--> $DIR/attr.rs:5:3
|
-LL | #![lang(foo)] //~ ERROR an inner attribute is not permitted in this context
+LL | #![lang = "foo"] //~ ERROR an inner attribute is not permitted in this context
| ^
|
= note: inner attributes, like `#![no_std]`, annotate the item enclosing them, and are usually found at the beginning of source files. Outer attributes, like `#[test]`, annotate the item following them.
-error: aborting due to previous error
+error[E0522]: definition of an unknown language item: `foo`
+ --> $DIR/attr.rs:5:1
+ |
+LL | #![lang = "foo"] //~ ERROR an inner attribute is not permitted in this context
+ | ^^^^^^^^^^^^^^^^ definition of unknown language item `foo`
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0522`.
diff --git a/src/test/ui/pattern/const-pat-ice.rs b/src/test/ui/pattern/const-pat-ice.rs
index 6496a2a..865c54b 100644
--- a/src/test/ui/pattern/const-pat-ice.rs
+++ b/src/test/ui/pattern/const-pat-ice.rs
@@ -1,4 +1,5 @@
// failure-status: 101
+// rustc-env:RUST_BACKTRACE=0
// This is a repro test for an ICE in our pattern handling of constants.
diff --git a/src/test/ui/platform-intrinsic-params.rs b/src/test/ui/platform-intrinsic-params.rs
deleted file mode 100644
index 5759a10e..0000000
--- a/src/test/ui/platform-intrinsic-params.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-#![feature(platform_intrinsics)]
-extern "platform-intrinsic" {
- fn x86_mm_movemask_ps() -> i32; //~ERROR found 0, expected 1
-}
-
-fn main() { }
diff --git a/src/test/ui/platform-intrinsic-params.stderr b/src/test/ui/platform-intrinsic-params.stderr
deleted file mode 100644
index 17671ce..0000000
--- a/src/test/ui/platform-intrinsic-params.stderr
+++ /dev/null
@@ -1,9 +0,0 @@
-error[E0444]: platform-specific intrinsic has invalid number of arguments: found 0, expected 1
- --> $DIR/platform-intrinsic-params.rs:3:5
- |
-LL | fn x86_mm_movemask_ps() -> i32; //~ERROR found 0, expected 1
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0444`.
diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.rs b/src/test/ui/privacy/private-in-public-assoc-ty.rs
index c6e86ed..81d2395 100644
--- a/src/test/ui/privacy/private-in-public-assoc-ty.rs
+++ b/src/test/ui/privacy/private-in-public-assoc-ty.rs
@@ -1,7 +1,7 @@
// Private types and traits are not allowed in interfaces of associated types.
// This test also ensures that the checks are performed even inside private modules.
-#![feature(associated_type_defaults)]
+#![feature(associated_type_defaults, existential_type)]
mod m {
struct Priv;
@@ -23,10 +23,17 @@
type Alias4 = Priv;
//~^ ERROR private type `m::Priv` in public interface
+
+ type Exist;
+ fn infer_exist() -> Self::Exist;
}
impl PubTr for u8 {
type Alias1 = Priv;
//~^ ERROR private type `m::Priv` in public interface
+
+ existential type Exist: PrivTr;
+ //~^ ERROR private trait `m::PrivTr` in public interface
+ fn infer_exist() -> Self::Exist { Priv }
}
}
diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.stderr b/src/test/ui/privacy/private-in-public-assoc-ty.stderr
index 6740277..0e5dab1 100644
--- a/src/test/ui/privacy/private-in-public-assoc-ty.stderr
+++ b/src/test/ui/privacy/private-in-public-assoc-ty.stderr
@@ -6,7 +6,7 @@
LL | | //~| WARN this was previously accepted
LL | | //~| WARN private type `m::Priv` in public interface
... |
-LL | | //~^ ERROR private type `m::Priv` in public interface
+LL | | fn infer_exist() -> Self::Exist;
LL | | }
| |_____^
|
@@ -22,7 +22,7 @@
LL | | //~| WARN this was previously accepted
LL | | //~| WARN private type `m::Priv` in public interface
... |
-LL | | //~^ ERROR private type `m::Priv` in public interface
+LL | | fn infer_exist() -> Self::Exist;
LL | | }
| |_____^
|
@@ -39,7 +39,7 @@
| ^^^^^^^^^^^^^^^^^^^ can't leak private type
error[E0446]: private type `m::Priv` in public interface
- --> $DIR/private-in-public-assoc-ty.rs:28:9
+ --> $DIR/private-in-public-assoc-ty.rs:31:9
|
LL | struct Priv;
| - `m::Priv` declared as private
@@ -47,6 +47,16 @@
LL | type Alias1 = Priv;
| ^^^^^^^^^^^^^^^^^^^ can't leak private type
-error: aborting due to 2 previous errors
+error[E0445]: private trait `m::PrivTr` in public interface
+ --> $DIR/private-in-public-assoc-ty.rs:34:9
+ |
+LL | trait PrivTr {}
+ | - `m::PrivTr` declared as private
+...
+LL | existential type Exist: PrivTr;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't leak private trait
-For more information about this error, try `rustc --explain E0446`.
+error: aborting due to 3 previous errors
+
+Some errors occurred: E0445, E0446.
+For more information about an error, try `rustc --explain E0445`.
diff --git a/src/test/ui/privacy/private-in-public-existential.rs b/src/test/ui/privacy/private-in-public-existential.rs
index 95658f4..61c6130 100644
--- a/src/test/ui/privacy/private-in-public-existential.rs
+++ b/src/test/ui/privacy/private-in-public-existential.rs
@@ -12,4 +12,14 @@
Priv
}
+pub trait Trait {
+ type Pub: Default;
+ fn method() -> Self::Pub;
+}
+
+impl Trait for u8 {
+ existential type Pub: Default;
+ fn method() -> Self::Pub { Priv }
+}
+
fn main() {}
diff --git a/src/test/ui/proc-macro/attribute.rs b/src/test/ui/proc-macro/attribute.rs
index 736030f..a0b982d 100644
--- a/src/test/ui/proc-macro/attribute.rs
+++ b/src/test/ui/proc-macro/attribute.rs
@@ -6,13 +6,13 @@
extern crate proc_macro;
#[proc_macro_derive]
-//~^ ERROR: attribute must be of form: #[proc_macro_derive(TraitName)]
+//~^ ERROR: attribute must be of the form
pub fn foo1(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
input
}
#[proc_macro_derive = "foo"]
-//~^ ERROR: attribute must be of form: #[proc_macro_derive(TraitName)]
+//~^ ERROR: attribute must be of the form
pub fn foo2(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
input
}
diff --git a/src/test/ui/proc-macro/attribute.stderr b/src/test/ui/proc-macro/attribute.stderr
index a8fecd2..231eb1f 100644
--- a/src/test/ui/proc-macro/attribute.stderr
+++ b/src/test/ui/proc-macro/attribute.stderr
@@ -1,15 +1,3 @@
-error: attribute must be of form: #[proc_macro_derive(TraitName)]
- --> $DIR/attribute.rs:8:1
- |
-LL | #[proc_macro_derive]
- | ^^^^^^^^^^^^^^^^^^^^
-
-error: attribute must be of form: #[proc_macro_derive(TraitName)]
- --> $DIR/attribute.rs:14:1
- |
-LL | #[proc_macro_derive = "foo"]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
error: must only be one word
--> $DIR/attribute.rs:21:5
|
@@ -46,5 +34,17 @@
LL | #[proc_macro_derive(l, attributes(m), n)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+error: attribute must be of the form `#[proc_macro_derive(TraitName, /*opt*/ attributes(name1, name2, ...))]`
+ --> $DIR/attribute.rs:8:1
+ |
+LL | #[proc_macro_derive]
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: attribute must be of the form `#[proc_macro_derive(TraitName, /*opt*/ attributes(name1, name2, ...))]`
+ --> $DIR/attribute.rs:14:1
+ |
+LL | #[proc_macro_derive = "foo"]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
error: aborting due to 8 previous errors
diff --git a/src/test/ui/proc-macro/invalid-attributes.rs b/src/test/ui/proc-macro/invalid-attributes.rs
index 22ebc77..c5ec492 100644
--- a/src/test/ui/proc-macro/invalid-attributes.rs
+++ b/src/test/ui/proc-macro/invalid-attributes.rs
@@ -7,20 +7,20 @@
use proc_macro::TokenStream;
-#[proc_macro = "test"] //~ ERROR: does not take any arguments
+#[proc_macro = "test"] //~ ERROR attribute must be of the form
pub fn a(a: TokenStream) -> TokenStream { a }
-#[proc_macro()] //~ ERROR: does not take any arguments
+#[proc_macro()] //~ ERROR attribute must be of the form
pub fn c(a: TokenStream) -> TokenStream { a }
-#[proc_macro(x)] //~ ERROR: does not take any arguments
+#[proc_macro(x)] //~ ERROR attribute must be of the form
pub fn d(a: TokenStream) -> TokenStream { a }
-#[proc_macro_attribute = "test"] //~ ERROR: does not take any arguments
+#[proc_macro_attribute = "test"] //~ ERROR attribute must be of the form
pub fn e(_: TokenStream, a: TokenStream) -> TokenStream { a }
-#[proc_macro_attribute()] //~ ERROR: does not take any arguments
+#[proc_macro_attribute()] //~ ERROR attribute must be of the form
pub fn g(_: TokenStream, a: TokenStream) -> TokenStream { a }
-#[proc_macro_attribute(x)] //~ ERROR: does not take any arguments
+#[proc_macro_attribute(x)] //~ ERROR attribute must be of the form
pub fn h(_: TokenStream, a: TokenStream) -> TokenStream { a }
diff --git a/src/test/ui/proc-macro/invalid-attributes.stderr b/src/test/ui/proc-macro/invalid-attributes.stderr
index 31c42bc..06a7ef2 100644
--- a/src/test/ui/proc-macro/invalid-attributes.stderr
+++ b/src/test/ui/proc-macro/invalid-attributes.stderr
@@ -1,37 +1,37 @@
-error: `#[proc_macro]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro]`
--> $DIR/invalid-attributes.rs:10:1
|
-LL | #[proc_macro = "test"] //~ ERROR: does not take any arguments
+LL | #[proc_macro = "test"] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^^^^
-error: `#[proc_macro]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro]`
--> $DIR/invalid-attributes.rs:13:1
|
-LL | #[proc_macro()] //~ ERROR: does not take any arguments
+LL | #[proc_macro()] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^
-error: `#[proc_macro]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro]`
--> $DIR/invalid-attributes.rs:16:1
|
-LL | #[proc_macro(x)] //~ ERROR: does not take any arguments
+LL | #[proc_macro(x)] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^
-error: `#[proc_macro_attribute]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro_attribute]`
--> $DIR/invalid-attributes.rs:19:1
|
-LL | #[proc_macro_attribute = "test"] //~ ERROR: does not take any arguments
+LL | #[proc_macro_attribute = "test"] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-error: `#[proc_macro_attribute]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro_attribute]`
--> $DIR/invalid-attributes.rs:22:1
|
-LL | #[proc_macro_attribute()] //~ ERROR: does not take any arguments
+LL | #[proc_macro_attribute()] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^^^^^^^
-error: `#[proc_macro_attribute]` attribute does not take any arguments
+error: attribute must be of the form `#[proc_macro_attribute]`
--> $DIR/invalid-attributes.rs:25:1
|
-LL | #[proc_macro_attribute(x)] //~ ERROR: does not take any arguments
+LL | #[proc_macro_attribute(x)] //~ ERROR attribute must be of the form
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 6 previous errors
diff --git a/src/test/ui/regions/regions-static-bound.nll.stderr b/src/test/ui/regions/regions-static-bound.nll.stderr
index f667afd..d6cec03 100644
--- a/src/test/ui/regions/regions-static-bound.nll.stderr
+++ b/src/test/ui/regions/regions-static-bound.nll.stderr
@@ -1,4 +1,4 @@
-error: unsatisfied lifetime constraints
+error: lifetime may not live long enough
--> $DIR/regions-static-bound.rs:9:5
|
LL | fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a {
diff --git a/src/test/ui/regions/regions-static-bound.rs b/src/test/ui/regions/regions-static-bound.rs
index 3ee5187..c1a15e5 100644
--- a/src/test/ui/regions/regions-static-bound.rs
+++ b/src/test/ui/regions/regions-static-bound.rs
@@ -7,7 +7,7 @@
where 'a: 'b, 'b: 'static { t }
fn static_id_wrong_way<'a>(t: &'a ()) -> &'static () where 'static: 'a {
t //[ll]~ ERROR E0312
- //[nll]~^ ERROR unsatisfied lifetime constraints
+ //[nll]~^ ERROR lifetime may not live long enough
}
fn error(u: &(), v: &()) {
diff --git a/src/test/ui/repr.rs b/src/test/ui/repr.rs
index a35252c41..9d84474 100644
--- a/src/test/ui/repr.rs
+++ b/src/test/ui/repr.rs
@@ -1,15 +1,13 @@
-// compile-pass
-
#[repr]
-//^ WARN `repr` attribute must have a hint
+//~^ ERROR attribute must be of the form
struct _A {}
#[repr = "B"]
-//^ WARN `repr` attribute isn't configurable with a literal
+//~^ ERROR attribute must be of the form
struct _B {}
#[repr = "C"]
-//^ WARN `repr` attribute isn't configurable with a literal
+//~^ ERROR attribute must be of the form
struct _C {}
#[repr(C)]
diff --git a/src/test/ui/repr.stderr b/src/test/ui/repr.stderr
index 503d47c..7ebfe08 100644
--- a/src/test/ui/repr.stderr
+++ b/src/test/ui/repr.stderr
@@ -1,25 +1,20 @@
-warning: `repr` attribute must have a hint
- --> $DIR/repr.rs:3:1
+error: attribute must be of the form `#[repr(C, packed, ...)]`
+ --> $DIR/repr.rs:1:1
|
LL | #[repr]
- | ^^^^^^^ needs a hint
- |
- = note: #[warn(bad_repr)] on by default
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
+ | ^^^^^^^
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/repr.rs:7:1
+error: attribute must be of the form `#[repr(C, packed, ...)]`
+ --> $DIR/repr.rs:5:1
|
LL | #[repr = "B"]
- | ^^^^^^^^^^^^^ needs a hint
- |
- = help: valid hints include `#[repr(C)]`, `#[repr(packed)]`, `#[repr(rust)]` and `#[repr(transparent)]`
- = note: for more information, visit <https://doc.rust-lang.org/reference/type-layout.html>
+ | ^^^^^^^^^^^^^
-warning: `repr` attribute isn't configurable with a literal
- --> $DIR/repr.rs:11:1
+error: attribute must be of the form `#[repr(C, packed, ...)]`
+ --> $DIR/repr.rs:9:1
|
LL | #[repr = "C"]
- | ^^^^^^^^^^^^^ help: give `repr` a hint: `#[repr(C)]`
+ | ^^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
diff --git a/src/test/ui/resolve/resolve-hint-macro.stderr b/src/test/ui/resolve/resolve-hint-macro.stderr
index 4f6d0f6..ebe3c36 100644
--- a/src/test/ui/resolve/resolve-hint-macro.stderr
+++ b/src/test/ui/resolve/resolve-hint-macro.stderr
@@ -2,7 +2,7 @@
--> $DIR/resolve-hint-macro.rs:2:5
|
LL | assert(true);
- | ^^^^^^ did you mean `assert!(...)`?
+ | ^^^^^^ help: use `!` to invoke the macro: `assert!`
error: aborting due to previous error
diff --git a/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr b/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr
index 8a9426b..b7b158c 100644
--- a/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr
+++ b/src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr
@@ -4,15 +4,15 @@
LL | a.I
| ^--
| |
- | did you mean `a::I`?
+ | help: use the path separator to refer to an item: `a::I`
error[E0423]: expected value, found module `a`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:22:5
|
LL | a.g()
- | ^----
+ | ^--
| |
- | did you mean `a::g(...)`?
+ | help: use the path separator to refer to an item: `a::g`
error[E0423]: expected value, found module `a`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:27:5
@@ -20,16 +20,21 @@
LL | a.b.J
| ^--
| |
- | did you mean `a::b`?
+ | help: use the path separator to refer to an item: `a::b`
error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:32:5
|
LL | a::b.J
- | ^^^---
- | | |
- | | help: a constant with a similar name exists: `I`
- | did you mean `a::b::J`?
+ | ^^^^
+help: a constant with a similar name exists
+ |
+LL | a::I.J
+ | ^
+help: use the path separator to refer to an item
+ |
+LL | a::b::J
+ |
error[E0423]: expected value, found module `a`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:37:5
@@ -37,7 +42,7 @@
LL | a.b.f();
| ^--
| |
- | did you mean `a::b`?
+ | help: use the path separator to refer to an item: `a::b`
error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:40:12
@@ -51,10 +56,15 @@
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:45:5
|
LL | a::b.f()
- | ^^^-----
- | | |
- | | help: a constant with a similar name exists: `I`
- | did you mean `a::b::f(...)`?
+ | ^^^^
+help: a constant with a similar name exists
+ |
+LL | a::I.f()
+ | ^
+help: use the path separator to refer to an item
+ |
+LL | a::b::f()
+ | ^^^^^^^
error[E0423]: expected value, found module `a::b`
--> $DIR/suggest-path-instead-of-mod-dot-item.rs:50:5
diff --git a/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.rs b/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.rs
index 27db489..3375210 100644
--- a/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.rs
+++ b/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.rs
@@ -1,7 +1,7 @@
#![feature(non_exhaustive)]
#[non_exhaustive(anything)]
-//~^ ERROR attribute should be empty [E0702]
+//~^ ERROR attribute must be of the form
struct Foo;
#[non_exhaustive]
diff --git a/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr b/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr
index c069999..1d055fe 100644
--- a/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr
+++ b/src/test/ui/rfc-2008-non-exhaustive/invalid-attribute.stderr
@@ -1,11 +1,8 @@
-error[E0702]: attribute should be empty
+error: attribute must be of the form `#[non_exhaustive]`
--> $DIR/invalid-attribute.rs:3:1
|
LL | #[non_exhaustive(anything)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-LL | //~^ ERROR attribute should be empty [E0702]
-LL | struct Foo;
- | ----------- not empty
error[E0701]: attribute can only be applied to a struct or enum
--> $DIR/invalid-attribute.rs:7:1
@@ -30,5 +27,4 @@
error: aborting due to 3 previous errors
-Some errors occurred: E0701, E0702.
-For more information about an error, try `rustc --explain E0701`.
+For more information about this error, try `rustc --explain E0701`.
diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs b/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs
deleted file mode 100644
index 7405678..0000000
--- a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs
+++ /dev/null
@@ -1,59 +0,0 @@
-#![feature(repr_simd, platform_intrinsics)]
-#![allow(non_camel_case_types)]
-
-#[repr(simd)]
-struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
-#[repr(simd)]
-struct u16x8(u16, u16, u16, u16, u16, u16, u16, u16);
-
-#[repr(simd)]
-struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8,
- i8, i8, i8, i8, i8, i8, i8, i8);
-#[repr(simd)]
-struct i32x4(i32, i32, i32, i32);
-#[repr(simd)]
-struct f32x4(f32, f32, f32, f32);
-#[repr(simd)]
-struct i64x2(i64, i64);
-
-// correct signatures work well
-mod right {
- use {i16x8, u16x8};
- extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8;
- fn x86_mm_adds_epu16(x: u16x8, y: u16x8) -> u16x8;
- }
-}
-// but incorrect ones don't.
-
-mod signedness {
- use {i16x8, u16x8};
- // signedness matters
- extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8;
- //~^ ERROR intrinsic argument 1 has wrong type
- //~^^ ERROR intrinsic argument 2 has wrong type
- //~^^^ ERROR intrinsic return value has wrong type
- fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8;
- //~^ ERROR intrinsic argument 1 has wrong type
- //~^^ ERROR intrinsic argument 2 has wrong type
- //~^^^ ERROR intrinsic return value has wrong type
- }
-}
-// as do lengths
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- //~^ ERROR intrinsic argument 1 has wrong type
- //~^^ ERROR intrinsic argument 2 has wrong type
- //~^^^ ERROR intrinsic return value has wrong type
-}
-// and so does int vs. float:
-extern "platform-intrinsic" {
- fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4;
- //~^ ERROR intrinsic argument 1 has wrong type
- //~^^ ERROR intrinsic argument 2 has wrong type
- //~^^^ ERROR intrinsic return value has wrong type
-}
-
-
-fn main() {}
diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr b/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr
deleted file mode 100644
index 22df5e4..0000000
--- a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr
+++ /dev/null
@@ -1,75 +0,0 @@
-error[E0442]: intrinsic argument 1 has wrong type: found vector with length 16, expected length 8
- --> $DIR/simd-intrinsic-declaration-type.rs:45:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found vector with length 4, expected length 8
- --> $DIR/simd-intrinsic-declaration-type.rs:45:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found vector with length 2, expected length 8
- --> $DIR/simd-intrinsic-declaration-type.rs:45:5
- |
-LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 1 has wrong type: found `i32`, expected `f32`
- --> $DIR/simd-intrinsic-declaration-type.rs:52:5
- |
-LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found `i32`, expected `f32`
- --> $DIR/simd-intrinsic-declaration-type.rs:52:5
- |
-LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found `i32`, expected `f32`
- --> $DIR/simd-intrinsic-declaration-type.rs:52:5
- |
-LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 1 has wrong type: found `u16`, expected `i16`
- --> $DIR/simd-intrinsic-declaration-type.rs:33:9
- |
-LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found `u16`, expected `i16`
- --> $DIR/simd-intrinsic-declaration-type.rs:33:9
- |
-LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found `u16`, expected `i16`
- --> $DIR/simd-intrinsic-declaration-type.rs:33:9
- |
-LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 1 has wrong type: found `i16`, expected `u16`
- --> $DIR/simd-intrinsic-declaration-type.rs:37:9
- |
-LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic argument 2 has wrong type: found `i16`, expected `u16`
- --> $DIR/simd-intrinsic-declaration-type.rs:37:9
- |
-LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0442]: intrinsic return value has wrong type: found `i16`, expected `u16`
- --> $DIR/simd-intrinsic-declaration-type.rs:37:9
- |
-LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 12 previous errors
-
-For more information about this error, try `rustc --explain E0442`.
diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs b/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs
deleted file mode 100644
index f38ef2e..0000000
--- a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-#![feature(repr_simd, platform_intrinsics)]
-
-#[repr(simd)]
-struct A(i16, i16, i16, i16, i16, i16, i16, i16);
-#[repr(simd)]
-struct B(i16, i16, i16, i16, i16, i16, i16, i16);
-
-// each intrinsic definition has to use the same nominal type for any
-// vector structure throughout that declaration (i.e., every instance
-// of i16x8 in each `fn ...;` needs to be either A or B)
-
-extern "platform-intrinsic" {
- fn x86_mm_adds_epi16(x: A, y: A) -> B;
- //~^ ERROR intrinsic return value has wrong type: found `B`, expected `A`
- fn x86_mm_subs_epi16(x: A, y: B) -> A;
- //~^ ERROR intrinsic argument 2 has wrong type: found `B`, expected `A`
-
- // ok:
- fn x86_mm_max_epi16(x: B, y: B) -> B;
- fn x86_mm_min_epi16(x: A, y: A) -> A;
-}
-
-fn main() {}
diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr b/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr
deleted file mode 100644
index 2754dd1..0000000
--- a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr
+++ /dev/null
@@ -1,15 +0,0 @@
-error[E0443]: intrinsic return value has wrong type: found `B`, expected `A` which was used for this vector type previously in this signature
- --> $DIR/simd-intrinsic-single-nominal-type.rs:13:5
- |
-LL | fn x86_mm_adds_epi16(x: A, y: A) -> B;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error[E0443]: intrinsic argument 2 has wrong type: found `B`, expected `A` which was used for this vector type previously in this signature
- --> $DIR/simd-intrinsic-single-nominal-type.rs:15:5
- |
-LL | fn x86_mm_subs_epi16(x: A, y: B) -> A;
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0443`.
diff --git a/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.rs b/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.rs
index 3c4d629..1f0a7a8 100644
--- a/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.rs
+++ b/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.rs
@@ -1,6 +1,6 @@
// compile-flags:-Zforce-unstable-if-unmarked
-#[unstable] //~ ERROR: stability attributes may not be used
-#[stable] //~ ERROR: stability attributes may not be used
-#[rustc_deprecated] //~ ERROR: stability attributes may not be used
+#[unstable()] //~ ERROR: stability attributes may not be used
+#[stable()] //~ ERROR: stability attributes may not be used
+#[rustc_deprecated()] //~ ERROR: stability attributes may not be used
fn main() { }
diff --git a/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.stderr b/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.stderr
index 2b8fb86..cd8ea92 100644
--- a/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.stderr
+++ b/src/test/ui/stability-attribute/stability-attribute-non-staged-force-unstable.stderr
@@ -1,20 +1,20 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged-force-unstable.rs:3:1
|
-LL | #[unstable] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^^^
+LL | #[unstable()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged-force-unstable.rs:4:1
|
-LL | #[stable] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^
+LL | #[stable()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged-force-unstable.rs:5:1
|
-LL | #[rustc_deprecated] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 3 previous errors
diff --git a/src/test/ui/stability-attribute/stability-attribute-non-staged.rs b/src/test/ui/stability-attribute/stability-attribute-non-staged.rs
index 3b22385..fc2c2b5 100644
--- a/src/test/ui/stability-attribute/stability-attribute-non-staged.rs
+++ b/src/test/ui/stability-attribute/stability-attribute-non-staged.rs
@@ -1,4 +1,4 @@
-#[unstable] //~ ERROR: stability attributes may not be used
-#[stable] //~ ERROR: stability attributes may not be used
-#[rustc_deprecated] //~ ERROR: stability attributes may not be used
+#[unstable()] //~ ERROR: stability attributes may not be used
+#[stable()] //~ ERROR: stability attributes may not be used
+#[rustc_deprecated()] //~ ERROR: stability attributes may not be used
fn main() { }
diff --git a/src/test/ui/stability-attribute/stability-attribute-non-staged.stderr b/src/test/ui/stability-attribute/stability-attribute-non-staged.stderr
index ad437dd..67f6ef8 100644
--- a/src/test/ui/stability-attribute/stability-attribute-non-staged.stderr
+++ b/src/test/ui/stability-attribute/stability-attribute-non-staged.stderr
@@ -1,20 +1,20 @@
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged.rs:1:1
|
-LL | #[unstable] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^^^
+LL | #[unstable()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged.rs:2:1
|
-LL | #[stable] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^
+LL | #[stable()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^
error: stability attributes may not be used outside of the standard library
--> $DIR/stability-attribute-non-staged.rs:3:1
|
-LL | #[rustc_deprecated] //~ ERROR: stability attributes may not be used
- | ^^^^^^^^^^^^^^^^^^^
+LL | #[rustc_deprecated()] //~ ERROR: stability attributes may not be used
+ | ^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 3 previous errors
diff --git a/src/test/ui/stability-attribute/stability-attribute-sanity-4.rs b/src/test/ui/stability-attribute/stability-attribute-sanity-4.rs
new file mode 100644
index 0000000..3fd54bc
--- /dev/null
+++ b/src/test/ui/stability-attribute/stability-attribute-sanity-4.rs
@@ -0,0 +1,29 @@
+// Various checks that stability attributes are used correctly, per RFC 507
+
+#![feature(staged_api)]
+
+#![stable(feature = "rust1", since = "1.0.0")]
+
+mod bogus_attribute_types_2 {
+ #[unstable] //~ ERROR attribute must be of the form
+ fn f1() { }
+
+ #[unstable = "b"] //~ ERROR attribute must be of the form
+ fn f2() { }
+
+ #[stable] //~ ERROR attribute must be of the form
+ fn f3() { }
+
+ #[stable = "a"] //~ ERROR attribute must be of the form
+ fn f4() { }
+
+ #[stable(feature = "a", since = "b")]
+ #[rustc_deprecated] //~ ERROR attribute must be of the form
+ fn f5() { }
+
+ #[stable(feature = "a", since = "b")]
+ #[rustc_deprecated = "a"] //~ ERROR attribute must be of the form
+ fn f6() { }
+}
+
+fn main() { }
diff --git a/src/test/ui/stability-attribute/stability-attribute-sanity-4.stderr b/src/test/ui/stability-attribute/stability-attribute-sanity-4.stderr
new file mode 100644
index 0000000..4b4efe9
--- /dev/null
+++ b/src/test/ui/stability-attribute/stability-attribute-sanity-4.stderr
@@ -0,0 +1,38 @@
+error: attribute must be of the form `#[unstable(feature = "name", reason = "...", issue = "N")]`
+ --> $DIR/stability-attribute-sanity-4.rs:8:5
+ |
+LL | #[unstable] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^
+
+error: attribute must be of the form `#[unstable(feature = "name", reason = "...", issue = "N")]`
+ --> $DIR/stability-attribute-sanity-4.rs:11:5
+ |
+LL | #[unstable = "b"] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^^^
+
+error: attribute must be of the form `#[stable(feature = "name", since = "version")]`
+ --> $DIR/stability-attribute-sanity-4.rs:14:5
+ |
+LL | #[stable] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^
+
+error: attribute must be of the form `#[stable(feature = "name", since = "version")]`
+ --> $DIR/stability-attribute-sanity-4.rs:17:5
+ |
+LL | #[stable = "a"] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^
+
+error: attribute must be of the form `#[rustc_deprecated(since = "version", reason = "...")]`
+ --> $DIR/stability-attribute-sanity-4.rs:21:5
+ |
+LL | #[rustc_deprecated] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: attribute must be of the form `#[rustc_deprecated(since = "version", reason = "...")]`
+ --> $DIR/stability-attribute-sanity-4.rs:25:5
+ |
+LL | #[rustc_deprecated = "a"] //~ ERROR attribute must be of the form
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 6 previous errors
+
diff --git a/src/test/ui/stability-attribute/stability-attribute-sanity.rs b/src/test/ui/stability-attribute/stability-attribute-sanity.rs
index cb10df9..aebdb3b 100644
--- a/src/test/ui/stability-attribute/stability-attribute-sanity.rs
+++ b/src/test/ui/stability-attribute/stability-attribute-sanity.rs
@@ -21,28 +21,6 @@
fn f6() { }
}
-mod bogus_attribute_types_2 {
- #[unstable] //~ ERROR incorrect stability attribute type [E0548]
- fn f1() { }
-
- #[unstable = "b"] //~ ERROR incorrect stability attribute type [E0548]
- fn f2() { }
-
- #[stable] //~ ERROR incorrect stability attribute type [E0548]
- fn f3() { }
-
- #[stable = "a"] //~ ERROR incorrect stability attribute type [E0548]
- fn f4() { }
-
- #[stable(feature = "a", since = "b")]
- #[rustc_deprecated] //~ ERROR incorrect stability attribute type [E0548]
- fn f5() { }
-
- #[stable(feature = "a", since = "b")]
- #[rustc_deprecated = "a"] //~ ERROR incorrect stability attribute type [E0548]
- fn f6() { }
-}
-
mod missing_feature_names {
#[unstable(issue = "0")] //~ ERROR missing 'feature' [E0546]
fn f1() { }
diff --git a/src/test/ui/stability-attribute/stability-attribute-sanity.stderr b/src/test/ui/stability-attribute/stability-attribute-sanity.stderr
index 14c0728..74c1bbf 100644
--- a/src/test/ui/stability-attribute/stability-attribute-sanity.stderr
+++ b/src/test/ui/stability-attribute/stability-attribute-sanity.stderr
@@ -28,115 +28,79 @@
LL | #[stable(feature(b), since = "a")] //~ ERROR incorrect meta item [E0539]
| ^^^^^^^^^^
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:25:5
- |
-LL | #[unstable] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:28:5
- |
-LL | #[unstable = "b"] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:31:5
- |
-LL | #[stable] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:34:5
- |
-LL | #[stable = "a"] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:38:5
- |
-LL | #[rustc_deprecated] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^^^^^^^^^
-
-error[E0548]: incorrect stability attribute type
- --> $DIR/stability-attribute-sanity.rs:42:5
- |
-LL | #[rustc_deprecated = "a"] //~ ERROR incorrect stability attribute type [E0548]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^
-
error[E0546]: missing 'feature'
- --> $DIR/stability-attribute-sanity.rs:47:5
+ --> $DIR/stability-attribute-sanity.rs:25:5
|
LL | #[unstable(issue = "0")] //~ ERROR missing 'feature' [E0546]
| ^^^^^^^^^^^^^^^^^^^^^^^^
error[E0547]: missing 'issue'
- --> $DIR/stability-attribute-sanity.rs:50:5
+ --> $DIR/stability-attribute-sanity.rs:28:5
|
LL | #[unstable(feature = "b")] //~ ERROR missing 'issue' [E0547]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0546]: missing 'feature'
- --> $DIR/stability-attribute-sanity.rs:53:5
+ --> $DIR/stability-attribute-sanity.rs:31:5
|
LL | #[stable(since = "a")] //~ ERROR missing 'feature' [E0546]
| ^^^^^^^^^^^^^^^^^^^^^^
error[E0542]: missing 'since'
- --> $DIR/stability-attribute-sanity.rs:58:5
+ --> $DIR/stability-attribute-sanity.rs:36:5
|
LL | #[stable(feature = "a")] //~ ERROR missing 'since' [E0542]
| ^^^^^^^^^^^^^^^^^^^^^^^^
error[E0542]: missing 'since'
- --> $DIR/stability-attribute-sanity.rs:62:5
+ --> $DIR/stability-attribute-sanity.rs:40:5
|
LL | #[rustc_deprecated(reason = "a")] //~ ERROR missing 'since' [E0542]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0544]: multiple stability levels
- --> $DIR/stability-attribute-sanity.rs:67:1
+ --> $DIR/stability-attribute-sanity.rs:45:1
|
LL | #[stable(feature = "a", since = "b")] //~ ERROR multiple stability levels [E0544]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0544]: multiple stability levels
- --> $DIR/stability-attribute-sanity.rs:71:1
+ --> $DIR/stability-attribute-sanity.rs:49:1
|
LL | #[unstable(feature = "b", issue = "0")] //~ ERROR multiple stability levels [E0544]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0544]: multiple stability levels
- --> $DIR/stability-attribute-sanity.rs:75:1
+ --> $DIR/stability-attribute-sanity.rs:53:1
|
LL | #[stable(feature = "a", since = "b")] //~ ERROR multiple stability levels [E0544]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0540]: multiple rustc_deprecated attributes
- --> $DIR/stability-attribute-sanity.rs:83:1
+ --> $DIR/stability-attribute-sanity.rs:61:1
|
LL | pub const fn multiple4() { } //~ ERROR multiple rustc_deprecated attributes [E0540]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0553]: multiple rustc_const_unstable attributes
- --> $DIR/stability-attribute-sanity.rs:83:1
+ --> $DIR/stability-attribute-sanity.rs:61:1
|
LL | pub const fn multiple4() { } //~ ERROR multiple rustc_deprecated attributes [E0540]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: Invalid stability or deprecation version found
- --> $DIR/stability-attribute-sanity.rs:83:1
+ --> $DIR/stability-attribute-sanity.rs:61:1
|
LL | pub const fn multiple4() { } //~ ERROR multiple rustc_deprecated attributes [E0540]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0549]: rustc_deprecated attribute must be paired with either stable or unstable attribute
- --> $DIR/stability-attribute-sanity.rs:88:1
+ --> $DIR/stability-attribute-sanity.rs:66:1
|
LL | fn deprecated_without_unstable_or_stable() { }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-error: aborting due to 23 previous errors
+error: aborting due to 17 previous errors
-Some errors occurred: E0539, E0540, E0541, E0542, E0544, E0546, E0547, E0548, E0549...
+Some errors occurred: E0539, E0540, E0541, E0542, E0544, E0546, E0547, E0549, E0553.
For more information about an error, try `rustc --explain E0539`.
diff --git a/src/test/ui/str/str-idx.stderr b/src/test/ui/str/str-idx.stderr
index 108096d..71b1747 100644
--- a/src/test/ui/str/str-idx.stderr
+++ b/src/test/ui/str/str-idx.stderr
@@ -5,6 +5,8 @@
| ^^^^ `str` cannot be indexed by `{integer}`
|
= help: the trait `std::ops::Index<{integer}>` is not implemented for `str`
+ = note: you can use `.chars().nth()` or `.bytes().nth()`
+ see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>
error: aborting due to previous error
diff --git a/src/test/ui/str/str-mut-idx.stderr b/src/test/ui/str/str-mut-idx.stderr
index a0c7c2c..a1212c5 100644
--- a/src/test/ui/str/str-mut-idx.stderr
+++ b/src/test/ui/str/str-mut-idx.stderr
@@ -29,6 +29,8 @@
| ^^^^^^^^^ `str` cannot be mutably indexed by `usize`
|
= help: the trait `std::ops::IndexMut<usize>` is not implemented for `str`
+ = note: you can use `.chars().nth()` or `.bytes().nth()`
+ see chapter in The Book <https://doc.rust-lang.org/book/ch08-02-strings.html#indexing-into-strings>
error: aborting due to 3 previous errors
diff --git a/src/test/ui/suffixed-literal-meta.rs b/src/test/ui/suffixed-literal-meta.rs
index a311b65..bd2d662 100644
--- a/src/test/ui/suffixed-literal-meta.rs
+++ b/src/test/ui/suffixed-literal-meta.rs
@@ -1,13 +1,15 @@
-#[path = 1usize] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1u8] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1u16] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1u32] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1u64] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1isize] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1i8] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1i16] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1i32] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1i64] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1.0f32] //~ ERROR: suffixed literals are not allowed in attributes
-#[path = 1.0f64] //~ ERROR: suffixed literals are not allowed in attributes
+#![feature(custom_attribute)]
+
+#[my_attr = 1usize] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1u8] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1u16] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1u32] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1u64] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1isize] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1i8] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1i16] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1i32] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1i64] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1.0f32] //~ ERROR: suffixed literals are not allowed in attributes
+#[my_attr = 1.0f64] //~ ERROR: suffixed literals are not allowed in attributes
fn main() { }
diff --git a/src/test/ui/suffixed-literal-meta.stderr b/src/test/ui/suffixed-literal-meta.stderr
index 2f3ad8a..265aa78 100644
--- a/src/test/ui/suffixed-literal-meta.stderr
+++ b/src/test/ui/suffixed-literal-meta.stderr
@@ -1,96 +1,96 @@
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:1:10
+ --> $DIR/suffixed-literal-meta.rs:3:13
|
-LL | #[path = 1usize] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^^^
+LL | #[my_attr = 1usize] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:2:10
+ --> $DIR/suffixed-literal-meta.rs:4:13
|
-LL | #[path = 1u8] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^
+LL | #[my_attr = 1u8] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:3:10
+ --> $DIR/suffixed-literal-meta.rs:5:13
|
-LL | #[path = 1u16] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1u16] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:4:10
+ --> $DIR/suffixed-literal-meta.rs:6:13
|
-LL | #[path = 1u32] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1u32] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:5:10
+ --> $DIR/suffixed-literal-meta.rs:7:13
|
-LL | #[path = 1u64] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1u64] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:6:10
+ --> $DIR/suffixed-literal-meta.rs:8:13
|
-LL | #[path = 1isize] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^^^
+LL | #[my_attr = 1isize] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:7:10
+ --> $DIR/suffixed-literal-meta.rs:9:13
|
-LL | #[path = 1i8] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^
+LL | #[my_attr = 1i8] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:8:10
+ --> $DIR/suffixed-literal-meta.rs:10:13
|
-LL | #[path = 1i16] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1i16] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:9:10
+ --> $DIR/suffixed-literal-meta.rs:11:13
|
-LL | #[path = 1i32] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1i32] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:10:10
+ --> $DIR/suffixed-literal-meta.rs:12:13
|
-LL | #[path = 1i64] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^
+LL | #[my_attr = 1i64] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:11:10
+ --> $DIR/suffixed-literal-meta.rs:13:13
|
-LL | #[path = 1.0f32] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^^^
+LL | #[my_attr = 1.0f32] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
error: suffixed literals are not allowed in attributes
- --> $DIR/suffixed-literal-meta.rs:12:10
+ --> $DIR/suffixed-literal-meta.rs:14:13
|
-LL | #[path = 1.0f64] //~ ERROR: suffixed literals are not allowed in attributes
- | ^^^^^^
+LL | #[my_attr = 1.0f64] //~ ERROR: suffixed literals are not allowed in attributes
+ | ^^^^^^
|
= help: instead of using a suffixed literal (1u8, 1.0f32, etc.), use an unsuffixed version (1, 1.0, etc.).
diff --git a/src/test/ui/suggestions/suggest-move-lifetimes.stderr b/src/test/ui/suggestions/suggest-move-lifetimes.stderr
index 72a2cbe..b36e927 100644
--- a/src/test/ui/suggestions/suggest-move-lifetimes.stderr
+++ b/src/test/ui/suggestions/suggest-move-lifetimes.stderr
@@ -16,7 +16,7 @@
help: move the lifetime parameter prior to the first type parameter
|
LL | struct B<'a, T, U> { //~ ERROR lifetime parameters must be declared
- | ^^^ --
+ | ^^^ --
error: lifetime parameters must be declared prior to type parameters
--> $DIR/suggest-move-lifetimes.rs:10:16
@@ -36,7 +36,7 @@
help: move the lifetime parameter prior to the first type parameter
|
LL | struct D<'a, 'b, 'c, T, U, V> { //~ ERROR lifetime parameters must be declared
- | ^^^ ^^^ ^^^ ---
+ | ^^^ ^^^ ^^^ -- --
error: aborting due to 4 previous errors
diff --git a/src/test/ui/target-feature-wrong.stderr b/src/test/ui/target-feature-wrong.stderr
index 2eeaa10..236f5c4 100644
--- a/src/test/ui/target-feature-wrong.stderr
+++ b/src/test/ui/target-feature-wrong.stderr
@@ -1,4 +1,4 @@
-error: #[target_feature] attribute must be of the form #[target_feature(..)]
+error: attribute must be of the form `#[target_feature(enable = "name")]`
--> $DIR/target-feature-wrong.rs:16:1
|
LL | #[target_feature = "+sse2"]
diff --git a/src/test/ui/test-should-panic-attr.rs b/src/test/ui/test-should-panic-attr.rs
index 1b5afda..f936dd5 100644
--- a/src/test/ui/test-should-panic-attr.rs
+++ b/src/test/ui/test-should-panic-attr.rs
@@ -1,9 +1,8 @@
-// run-pass
+// compile-pass
// compile-flags: --test
#[test]
#[should_panic = "foo"]
-//~^ WARN: attribute must be of the form:
fn test1() {
panic!();
}
diff --git a/src/test/ui/test-should-panic-attr.stderr b/src/test/ui/test-should-panic-attr.stderr
index 0f25477..4b032eb 100644
--- a/src/test/ui/test-should-panic-attr.stderr
+++ b/src/test/ui/test-should-panic-attr.stderr
@@ -1,13 +1,5 @@
-warning: attribute must be of the form: `#[should_panic]` or `#[should_panic(expected = "error message")]`
- --> $DIR/test-should-panic-attr.rs:5:1
- |
-LL | #[should_panic = "foo"]
- | ^^^^^^^^^^^^^^^^^^^^^^^
- |
- = note: Errors in this attribute were erroneously allowed and will become a hard error in a future release.
-
warning: argument must be of the form: `expected = "error message"`
- --> $DIR/test-should-panic-attr.rs:12:1
+ --> $DIR/test-should-panic-attr.rs:11:1
|
LL | #[should_panic(expected)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -15,7 +7,7 @@
= note: Errors in this attribute were erroneously allowed and will become a hard error in a future release.
warning: argument must be of the form: `expected = "error message"`
- --> $DIR/test-should-panic-attr.rs:19:1
+ --> $DIR/test-should-panic-attr.rs:18:1
|
LL | #[should_panic(expect)]
| ^^^^^^^^^^^^^^^^^^^^^^^
@@ -23,7 +15,7 @@
= note: Errors in this attribute were erroneously allowed and will become a hard error in a future release.
warning: argument must be of the form: `expected = "error message"`
- --> $DIR/test-should-panic-attr.rs:26:1
+ --> $DIR/test-should-panic-attr.rs:25:1
|
LL | #[should_panic(expected(foo, bar))]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -31,7 +23,7 @@
= note: Errors in this attribute were erroneously allowed and will become a hard error in a future release.
warning: argument must be of the form: `expected = "error message"`
- --> $DIR/test-should-panic-attr.rs:33:1
+ --> $DIR/test-should-panic-attr.rs:32:1
|
LL | #[should_panic(expected = "foo", bar)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/thread-local-mutation.nll.stderr b/src/test/ui/thread-local-mutation.nll.stderr
new file mode 100644
index 0000000..0a3664b
--- /dev/null
+++ b/src/test/ui/thread-local-mutation.nll.stderr
@@ -0,0 +1,9 @@
+error[E0594]: cannot assign to immutable static item `S`
+ --> $DIR/thread-local-mutation.rs:11:5
+ |
+LL | S = "after"; //~ ERROR cannot assign to immutable
+ | ^^^^^^^^^^^ cannot assign
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/thread-local-mutation.rs b/src/test/ui/thread-local-mutation.rs
new file mode 100644
index 0000000..e738225
--- /dev/null
+++ b/src/test/ui/thread-local-mutation.rs
@@ -0,0 +1,18 @@
+// Regression test for #54901: immutable thread locals could be mutated. See:
+// https://github.com/rust-lang/rust/issues/29594#issuecomment-328177697
+// https://github.com/rust-lang/rust/issues/54901
+
+#![feature(thread_local)]
+
+#[thread_local]
+static S: &str = "before";
+
+fn set_s() {
+ S = "after"; //~ ERROR cannot assign to immutable
+}
+
+fn main() {
+ println!("{}", S);
+ set_s();
+ println!("{}", S);
+}
diff --git a/src/test/ui/thread-local-mutation.stderr b/src/test/ui/thread-local-mutation.stderr
new file mode 100644
index 0000000..bf29852
--- /dev/null
+++ b/src/test/ui/thread-local-mutation.stderr
@@ -0,0 +1,9 @@
+error[E0594]: cannot assign to immutable thread-local static item
+ --> $DIR/thread-local-mutation.rs:11:5
+ |
+LL | S = "after"; //~ ERROR cannot assign to immutable
+ | ^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0594`.
diff --git a/src/test/ui/traits/auxiliary/trait_alias.rs b/src/test/ui/traits/auxiliary/trait_alias.rs
new file mode 100644
index 0000000..9e56b87
--- /dev/null
+++ b/src/test/ui/traits/auxiliary/trait_alias.rs
@@ -0,0 +1,3 @@
+#![feature(trait_alias)]
+
+pub trait SendSync = Send + Sync;
diff --git a/src/test/ui/traits/trait-alias-cross-crate.rs b/src/test/ui/traits/trait-alias-cross-crate.rs
new file mode 100644
index 0000000..259fc4f
--- /dev/null
+++ b/src/test/ui/traits/trait-alias-cross-crate.rs
@@ -0,0 +1,17 @@
+// aux-build:trait_alias.rs
+
+#![feature(trait_alias)]
+
+extern crate trait_alias;
+
+use std::rc::Rc;
+use trait_alias::SendSync;
+
+fn use_alias<T: SendSync>() {}
+
+fn main() {
+ use_alias::<u32>();
+ use_alias::<Rc<u32>>();
+ //~^ ERROR `std::rc::Rc<u32>` cannot be sent between threads safely [E0277]
+ //~^^ ERROR `std::rc::Rc<u32>` cannot be shared between threads safely [E0277]
+}
diff --git a/src/test/ui/traits/trait-alias-cross-crate.stderr b/src/test/ui/traits/trait-alias-cross-crate.stderr
new file mode 100644
index 0000000..972d213
--- /dev/null
+++ b/src/test/ui/traits/trait-alias-cross-crate.stderr
@@ -0,0 +1,29 @@
+error[E0277]: `std::rc::Rc<u32>` cannot be sent between threads safely
+ --> $DIR/trait-alias-cross-crate.rs:14:5
+ |
+LL | use_alias::<Rc<u32>>();
+ | ^^^^^^^^^^^^^^^^^^^^ `std::rc::Rc<u32>` cannot be sent between threads safely
+ |
+ = help: the trait `std::marker::Send` is not implemented for `std::rc::Rc<u32>`
+note: required by `use_alias`
+ --> $DIR/trait-alias-cross-crate.rs:10:1
+ |
+LL | fn use_alias<T: SendSync>() {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0277]: `std::rc::Rc<u32>` cannot be shared between threads safely
+ --> $DIR/trait-alias-cross-crate.rs:14:5
+ |
+LL | use_alias::<Rc<u32>>();
+ | ^^^^^^^^^^^^^^^^^^^^ `std::rc::Rc<u32>` cannot be shared between threads safely
+ |
+ = help: the trait `std::marker::Sync` is not implemented for `std::rc::Rc<u32>`
+note: required by `use_alias`
+ --> $DIR/trait-alias-cross-crate.rs:10:1
+ |
+LL | fn use_alias<T: SendSync>() {}
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/try-block/try-block-in-edition2015.stderr b/src/test/ui/try-block/try-block-in-edition2015.stderr
index 6365008..a7b8106 100644
--- a/src/test/ui/try-block/try-block-in-edition2015.stderr
+++ b/src/test/ui/try-block/try-block-in-edition2015.stderr
@@ -15,7 +15,7 @@
--> $DIR/try-block-in-edition2015.rs:4:33
|
LL | let try_result: Option<_> = try {
- | ^^^ did you mean `try!(...)`?
+ | ^^^ help: use `!` to invoke the macro: `try!`
error: aborting due to 2 previous errors
diff --git a/src/test/ui/type-alias-enum-variants-priority-2.rs b/src/test/ui/type-alias-enum-variants-priority-2.rs
new file mode 100644
index 0000000..295f8ac
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority-2.rs
@@ -0,0 +1,13 @@
+#![feature(type_alias_enum_variants)]
+
+enum E {
+ V(u8)
+}
+
+impl E {
+ fn V() {}
+}
+
+fn main() {
+ <E>::V(); //~ ERROR this function takes 1 parameter but 0 parameters were supplied
+}
diff --git a/src/test/ui/type-alias-enum-variants-priority-2.stderr b/src/test/ui/type-alias-enum-variants-priority-2.stderr
new file mode 100644
index 0000000..c6ec96e
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority-2.stderr
@@ -0,0 +1,12 @@
+error[E0061]: this function takes 1 parameter but 0 parameters were supplied
+ --> $DIR/type-alias-enum-variants-priority-2.rs:12:5
+ |
+LL | V(u8)
+ | ----- defined here
+...
+LL | <E>::V(); //~ ERROR this function takes 1 parameter but 0 parameters were supplied
+ | ^^^^^^^^ expected 1 parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0061`.
diff --git a/src/test/ui/type-alias-enum-variants-priority-3.rs b/src/test/ui/type-alias-enum-variants-priority-3.rs
new file mode 100644
index 0000000..33f9655
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority-3.rs
@@ -0,0 +1,10 @@
+#![feature(type_alias_enum_variants)]
+
+enum E {
+ V
+}
+
+fn check() -> <E>::V {}
+//~^ ERROR expected type, found variant `V`
+
+fn main() {}
diff --git a/src/test/ui/type-alias-enum-variants-priority-3.stderr b/src/test/ui/type-alias-enum-variants-priority-3.stderr
new file mode 100644
index 0000000..b345154
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority-3.stderr
@@ -0,0 +1,8 @@
+error: expected type, found variant `V`
+ --> $DIR/type-alias-enum-variants-priority-3.rs:7:15
+ |
+LL | fn check() -> <E>::V {}
+ | ^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/type-alias-enum-variants-priority.rs b/src/test/ui/type-alias-enum-variants-priority.rs
new file mode 100644
index 0000000..db1da2b
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority.rs
@@ -0,0 +1,20 @@
+#![feature(type_alias_enum_variants)]
+#![deny(ambiguous_associated_items)]
+
+enum E {
+ V
+}
+
+trait Tr {
+ type V;
+ fn f() -> Self::V;
+}
+
+impl Tr for E {
+ type V = u8;
+ fn f() -> Self::V { 0 }
+ //~^ ERROR ambiguous associated item
+ //~| WARN this was previously accepted
+}
+
+fn main() {}
diff --git a/src/test/ui/type-alias-enum-variants-priority.stderr b/src/test/ui/type-alias-enum-variants-priority.stderr
new file mode 100644
index 0000000..dcf7dc7
--- /dev/null
+++ b/src/test/ui/type-alias-enum-variants-priority.stderr
@@ -0,0 +1,26 @@
+error: ambiguous associated item
+ --> $DIR/type-alias-enum-variants-priority.rs:15:15
+ |
+LL | fn f() -> Self::V { 0 }
+ | ^^^^^^^ help: use fully-qualified syntax: `<E as Trait>::V`
+ |
+note: lint level defined here
+ --> $DIR/type-alias-enum-variants-priority.rs:2:9
+ |
+LL | #![deny(ambiguous_associated_items)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #57644 <https://github.com/rust-lang/rust/issues/57644>
+note: `V` could refer to variant defined here
+ --> $DIR/type-alias-enum-variants-priority.rs:5:5
+ |
+LL | V
+ | ^
+note: `V` could also refer to associated type defined here
+ --> $DIR/type-alias-enum-variants-priority.rs:9:5
+ |
+LL | type V;
+ | ^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs
index 8c1baa5..4ca285b 100644
--- a/src/tools/build-manifest/src/main.rs
+++ b/src/tools/build-manifest/src/main.rs
@@ -95,6 +95,7 @@
"wasm32-unknown-unknown",
"x86_64-apple-darwin",
"x86_64-apple-ios",
+ "x86_64-fortanix-unknown-sgx",
"x86_64-fuchsia",
"x86_64-linux-android",
"x86_64-pc-windows-gnu",
diff --git a/src/tools/clippy b/src/tools/clippy
index c63b634..1b89724 160000
--- a/src/tools/clippy
+++ b/src/tools/clippy
@@ -1 +1 @@
-Subproject commit c63b6349b44019146cc2edcef8141692891b9401
+Subproject commit 1b89724b4889aef631b40d52c0943bdc28e04d1d
diff --git a/src/tools/rls b/src/tools/rls
index 1a6361b..ae0d89a 160000
--- a/src/tools/rls
+++ b/src/tools/rls
@@ -1 +1 @@
-Subproject commit 1a6361bd399a9466deba9b42ff2ff2ae365c5d0e
+Subproject commit ae0d89a08d091ba1563b571739768a09d4cd3d69
diff --git a/src/tools/tidy/src/bins.rs b/src/tools/tidy/src/bins.rs
index 7a5495b..610d1d8 100644
--- a/src/tools/tidy/src/bins.rs
+++ b/src/tools/tidy/src/bins.rs
@@ -2,12 +2,12 @@
//! by accident.
//!
//! In the past we've accidentally checked in test binaries and such which add a
-//! huge amount of bloat to the git history, so it's good to just ensure we
-//! don't do that again :)
+//! huge amount of bloat to the Git history, so it's good to just ensure we
+//! don't do that again.
use std::path::Path;
-// All files are executable on Windows, so just check on Unix
+// All files are executable on Windows, so just check on Unix.
#[cfg(windows)]
pub fn check(_path: &Path, _bad: &mut bool) {}
diff --git a/src/tools/tidy/src/cargo.rs b/src/tools/tidy/src/cargo.rs
index 3369d82..26ced7f 100644
--- a/src/tools/tidy/src/cargo.rs
+++ b/src/tools/tidy/src/cargo.rs
@@ -13,7 +13,7 @@
return
}
for entry in t!(path.read_dir(), path).map(|e| t!(e)) {
- // Look for `Cargo.toml` with a sibling `src/lib.rs` or `lib.rs`
+ // Look for `Cargo.toml` with a sibling `src/lib.rs` or `lib.rs`.
if entry.file_name().to_str() == Some("Cargo.toml") {
if path.join("src/lib.rs").is_file() {
verify(&entry.path(), &path.join("src/lib.rs"), bad)
@@ -27,8 +27,8 @@
}
}
-// Verify that the dependencies in Cargo.toml at `tomlfile` are sync'd with the
-// `extern crate` annotations in the lib.rs at `libfile`.
+/// Verifies that the dependencies in Cargo.toml at `tomlfile` are synced with
+/// the `extern crate` annotations in the lib.rs at `libfile`.
fn verify(tomlfile: &Path, libfile: &Path, bad: &mut bool) {
let toml = t!(fs::read_to_string(&tomlfile));
let librs = t!(fs::read_to_string(&libfile));
@@ -37,14 +37,16 @@
return
}
- // "Poor man's TOML parser", just assume we use one syntax for now
+ // "Poor man's TOML parser" -- just assume we use one syntax for now.
//
// We just look for:
//
- // [dependencies]
- // name = ...
- // name2 = ...
- // name3 = ...
+ // ````
+ // [dependencies]
+ // name = ...
+ // name2 = ...
+ // name3 = ...
+ // ```
//
// If we encounter a line starting with `[` then we assume it's the end of
// the dependency section and bail out.
@@ -63,14 +65,14 @@
continue
}
- // Don't worry about depending on core/std but not saying `extern crate
- // core/std`, that's intentional.
+ // Don't worry about depending on core/std while not writing `extern crate
+ // core/std` -- that's intentional.
if krate == "core" || krate == "std" {
continue
}
- // This is intentional, this dependency just makes the crate available
- // for others later on. Cover cases
+ // This is intentional -- this dependency just makes the crate available
+ // for others later on.
let whitelisted = krate.starts_with("panic");
if toml.contains("name = \"std\"") && whitelisted {
continue
diff --git a/src/tools/tidy/src/deps.rs b/src/tools/tidy/src/deps.rs
index 7f0f0c6..f1bfb6e 100644
--- a/src/tools/tidy/src/deps.rs
+++ b/src/tools/tidy/src/deps.rs
@@ -1,4 +1,4 @@
-//! Check license of third-party deps by inspecting vendor
+//! Checks the licenses of third-party dependencies by inspecting vendors.
use std::collections::{BTreeSet, HashSet, HashMap};
use std::fs;
@@ -21,7 +21,7 @@
/// These are exceptions to Rust's permissive licensing policy, and
/// should be considered bugs. Exceptions are only allowed in Rust
/// tooling. It is _crucial_ that no exception crates be dependencies
-/// of the Rust runtime (std / test).
+/// of the Rust runtime (std/test).
const EXCEPTIONS: &[&str] = &[
"mdbook", // MPL2, mdbook
"openssl", // BSD+advertising clause, cargo, mdbook
@@ -39,11 +39,11 @@
"colored", // MPL-2.0, rustfmt
"ordslice", // Apache-2.0, rls
"cloudabi", // BSD-2-Clause, (rls -> crossbeam-channel 0.2 -> rand 0.5)
- "ryu", // Apache-2.0, rls/cargo/... (b/c of serde)
+ "ryu", // Apache-2.0, rls/cargo/... (because of serde)
"bytesize", // Apache-2.0, cargo
"im-rc", // MPL-2.0+, cargo
"adler32", // BSD-3-Clause AND Zlib, cargo dep that isn't used
- "fortanix-sgx-abi", // MPL-2.0+, libstd but only for sgx target
+ "fortanix-sgx-abi", // MPL-2.0+, libstd but only for `sgx` target
];
/// Which crates to check against the whitelist?
@@ -156,7 +156,7 @@
Crate("wincolor"),
];
-// Some types for Serde to deserialize the output of `cargo metadata` to...
+// Some types for Serde to deserialize the output of `cargo metadata` to.
#[derive(Deserialize)]
struct Output {
@@ -174,9 +174,9 @@
dependencies: Vec<String>,
}
-/// A unique identifier for a crate
+/// A unique identifier for a crate.
#[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Debug, Hash)]
-struct Crate<'a>(&'a str); // (name,)
+struct Crate<'a>(&'a str); // (name)
#[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Debug, Hash)]
struct CrateVersion<'a>(&'a str, &'a str); // (name, version)
@@ -188,7 +188,7 @@
}
impl<'a> CrateVersion<'a> {
- /// Returns the struct and whether or not the dep is in-tree
+ /// Returns the struct and whether or not the dependency is in-tree.
pub fn from_str(s: &'a str) -> (Self, bool) {
let mut parts = s.split(' ');
let name = parts.next().unwrap();
@@ -215,7 +215,7 @@
///
/// Specifically, this checks that the license is correct.
pub fn check(path: &Path, bad: &mut bool) {
- // Check licences
+ // Check licences.
let path = path.join("../vendor");
assert!(path.exists(), "vendor directory missing");
let mut saw_dir = false;
@@ -223,7 +223,7 @@
saw_dir = true;
let dir = t!(dir);
- // skip our exceptions
+ // Skip our exceptions.
let is_exception = EXCEPTIONS.iter().any(|exception| {
dir.path()
.to_str()
@@ -240,18 +240,18 @@
assert!(saw_dir, "no vendored source");
}
-/// Checks the dependency of WHITELIST_CRATES at the given path. Changes `bad` to `true` if a check
-/// failed.
+/// Checks the dependency of `WHITELIST_CRATES` at the given path. Changes `bad` to `true` if a
+/// check failed.
///
-/// Specifically, this checks that the dependencies are on the WHITELIST.
+/// Specifically, this checks that the dependencies are on the `WHITELIST`.
pub fn check_whitelist(path: &Path, cargo: &Path, bad: &mut bool) {
- // Get dependencies from cargo metadata
+ // Get dependencies from Cargo metadata.
let resolve = get_deps(path, cargo);
- // Get the whitelist into a convenient form
+ // Get the whitelist in a convenient form.
let whitelist: HashSet<_> = WHITELIST.iter().cloned().collect();
- // Check dependencies
+ // Check dependencies.
let mut visited = BTreeSet::new();
let mut unapproved = BTreeSet::new();
for &krate in WHITELIST_CRATES.iter() {
@@ -308,9 +308,9 @@
}
}
-/// Get the dependencies of the crate at the given path using `cargo metadata`.
+/// Gets the dependencies of the crate at the given path using `cargo metadata`.
fn get_deps(path: &Path, cargo: &Path) -> Resolve {
- // Run `cargo metadata` to get the set of dependencies
+ // Run `cargo metadata` to get the set of dependencies.
let output = Command::new(cargo)
.arg("metadata")
.arg("--format-version")
@@ -335,25 +335,25 @@
krate: CrateVersion<'a>,
must_be_on_whitelist: bool,
) -> BTreeSet<Crate<'a>> {
- // Will contain bad deps
+ // This will contain bad deps.
let mut unapproved = BTreeSet::new();
- // Check if we have already visited this crate
+ // Check if we have already visited this crate.
if visited.contains(&krate) {
return unapproved;
}
visited.insert(krate);
- // If this path is in-tree, we don't require it to be on the whitelist
+ // If this path is in-tree, we don't require it to be on the whitelist.
if must_be_on_whitelist {
- // If this dependency is not on the WHITELIST, add to bad set
+ // If this dependency is not on `WHITELIST`, add to bad set.
if !whitelist.contains(&krate.into()) {
unapproved.insert(krate.into());
}
}
- // Do a DFS in the crate graph (it's a DAG, so we know we have no cycles!)
+ // Do a DFS in the crate graph (it's a DAG, so we know we have no cycles!).
let to_check = resolve
.nodes
.iter()
@@ -372,9 +372,10 @@
fn check_crate_duplicate(resolve: &Resolve, bad: &mut bool) {
const FORBIDDEN_TO_HAVE_DUPLICATES: &[&str] = &[
- // These two crates take quite a long time to build, let's not let two
- // versions of them accidentally sneak into our dependency graph to
- // ensure we keep our CI times under control
+ // These two crates take quite a long time to build, so don't allow two versions of them
+ // to accidentally sneak into our dependency graph, in order to ensure we keep our CI times
+ // under control.
+
// "cargo", // FIXME(#53005)
"rustc-ap-syntax",
];
diff --git a/src/tools/tidy/src/errors.rs b/src/tools/tidy/src/errors.rs
index 212b1a4..76ebc9b 100644
--- a/src/tools/tidy/src/errors.rs
+++ b/src/tools/tidy/src/errors.rs
@@ -22,11 +22,13 @@
contents.truncate(0);
t!(t!(File::open(file)).read_to_string(&mut contents));
- // In the register_long_diagnostics! macro, entries look like this:
+ // In the `register_long_diagnostics!` macro, entries look like this:
//
+ // ```
// EXXXX: r##"
// <Long diagnostic message>
// "##,
+ // ```
//
// and these long messages often have error codes themselves inside
// them, but we don't want to report duplicates in these cases. This
diff --git a/src/tools/tidy/src/extdeps.rs b/src/tools/tidy/src/extdeps.rs
index 8b5021e..52e263d 100644
--- a/src/tools/tidy/src/extdeps.rs
+++ b/src/tools/tidy/src/extdeps.rs
@@ -1,33 +1,32 @@
-// ! Check for external package sources. Allow only vendorable packages.
+//! Check for external package sources. Allow only vendorable packages.
use std::fs;
use std::path::Path;
-/// List of whitelisted sources for packages
+/// List of whitelisted sources for packages.
const WHITELISTED_SOURCES: &[&str] = &[
"\"registry+https://github.com/rust-lang/crates.io-index\"",
];
-/// check for external package sources
+/// Checks for external package sources.
pub fn check(path: &Path, bad: &mut bool) {
- // Cargo.lock of rust (tidy runs inside src/)
+ // `Cargo.lock` of rust (tidy runs inside `src/`).
let path = path.join("../Cargo.lock");
- // open and read the whole file
+ // Open and read the whole file.
let cargo_lock = t!(fs::read_to_string(&path));
- // process each line
+ // Process each line.
for line in cargo_lock.lines() {
-
- // consider only source entries
+ // Consider only source entries.
if ! line.starts_with("source = ") {
continue;
}
- // extract source value
+ // Extract source value.
let source = line.splitn(2, '=').nth(1).unwrap().trim();
- // ensure source is whitelisted
+ // Ensure source is whitelisted.
if !WHITELISTED_SOURCES.contains(&&*source) {
println!("invalid source: {}", source);
*bad = true;
diff --git a/src/tools/tidy/src/features.rs b/src/tools/tidy/src/features.rs
index 2435a0c..16f2e3b 100644
--- a/src/tools/tidy/src/features.rs
+++ b/src/tools/tidy/src/features.rs
@@ -1,12 +1,12 @@
-//! Tidy check to ensure that unstable features are all in order
+//! Tidy check to ensure that unstable features are all in order.
//!
//! This check will ensure properties like:
//!
-//! * All stability attributes look reasonably well formed
-//! * The set of library features is disjoint from the set of language features
-//! * Library features have at most one stability level
-//! * Library features have at most one `since` value
-//! * All unstable lang features have tests to ensure they are actually unstable
+//! * All stability attributes look reasonably well formed.
+//! * The set of library features is disjoint from the set of language features.
+//! * Library features have at most one stability level.
+//! * Library features have at most one `since` value.
+//! * All unstable lang features have tests to ensure they are actually unstable.
use std::collections::HashMap;
use std::fmt;
@@ -172,8 +172,8 @@
pub fn collect_lang_features(base_src_path: &Path, bad: &mut bool) -> Features {
let contents = t!(fs::read_to_string(base_src_path.join("libsyntax/feature_gate.rs")));
- // we allow rustc-internal features to omit a tracking issue.
- // these features must be marked with `// rustc internal` in its own group.
+ // We allow rustc-internal features to omit a tracking issue.
+ // These features must be marked with a `// rustc internal` in its own group.
let mut next_feature_is_rustc_internal = false;
contents.lines().zip(1..)
@@ -327,7 +327,7 @@
}
becoming_feature = None;
if line.contains("rustc_const_unstable(") {
- // const fn features are handled specially
+ // `const fn` features are handled specially.
let feature_name = match find_attr_val(line, "feature") {
Some(name) => name,
None => err!("malformed stability attribute"),
@@ -337,9 +337,8 @@
since: "None".to_owned(),
has_gate_test: false,
// FIXME(#57563): #57563 is now used as a common tracking issue,
- // although we would like to have specific tracking
- // issues for each `rustc_const_unstable` in the
- // future.
+ // although we would like to have specific tracking issues for each
+ // `rustc_const_unstable` in the future.
tracking_issue: Some(57563),
};
mf(Ok((feature_name, feature)), file, i + 1);
diff --git a/src/tools/tidy/src/lib.rs b/src/tools/tidy/src/lib.rs
index 58220c4..a103325 100644
--- a/src/tools/tidy/src/lib.rs
+++ b/src/tools/tidy/src/lib.rs
@@ -1,4 +1,4 @@
-//! Library used by tidy and other tools
+//! Library used by tidy and other tools.
//!
//! This library contains the tidy lints and exposes it
//! to be used by tools.
diff --git a/src/tools/tidy/src/main.rs b/src/tools/tidy/src/main.rs
index e705e2d..81b7b2a 100644
--- a/src/tools/tidy/src/main.rs
+++ b/src/tools/tidy/src/main.rs
@@ -1,4 +1,4 @@
-//! Tidy checks source code in this repository
+//! Tidy checks source code in this repository.
//!
//! This program runs all of the various tidy checks for style, cleanliness,
//! etc. This is run by default on `make check` and as part of the auto
diff --git a/src/tools/tidy/src/pal.rs b/src/tools/tidy/src/pal.rs
index a34712d..ce5e15a 100644
--- a/src/tools/tidy/src/pal.rs
+++ b/src/tools/tidy/src/pal.rs
@@ -1,4 +1,4 @@
-//! Tidy check to enforce rules about platform-specific code in std
+//! Tidy check to enforce rules about platform-specific code in std.
//!
//! This is intended to maintain existing standards of code
//! organization in hopes that the standard library will continue to
@@ -15,15 +15,15 @@
//! Following are the basic rules, though there are currently
//! exceptions:
//!
-//! - core may not have platform-specific code
-//! - libpanic_abort may have platform-specific code
-//! - libpanic_unwind may have platform-specific code
-//! - libunwind may have platform-specific code
-//! - other crates in the std facade may not
-//! - std may have platform-specific code in the following places
-//! - sys/unix/
-//! - sys/windows/
-//! - os/
+//! - core may not have platform-specific code.
+//! - libpanic_abort may have platform-specific code.
+//! - libpanic_unwind may have platform-specific code.
+//! - libunwind may have platform-specific code.
+//! - other crates in the std facade may not.
+//! - std may have platform-specific code in the following places:
+//! - `sys/unix/`
+//! - `sys/windows/`
+//! - `os/`
//!
//! `std/sys_common` should _not_ contain platform-specific code.
//! Finally, because std contains tests with platform-specific
@@ -36,7 +36,7 @@
use std::path::Path;
use std::iter::Iterator;
-// Paths that may contain platform-specific code
+// Paths that may contain platform-specific code.
const EXCEPTION_PATHS: &[&str] = &[
// std crates
"src/libpanic_abort",
@@ -54,10 +54,10 @@
"src/libstd/f64.rs",
"src/libstd/sys_common/mod.rs",
"src/libstd/sys_common/net.rs",
- "src/libterm", // Not sure how to make this crate portable, but test needs it
- "src/libtest", // Probably should defer to unstable std::sys APIs
+ "src/libterm", // Not sure how to make this crate portable, but test crate needs it.
+ "src/libtest", // Probably should defer to unstable `std::sys` APIs.
- // std testing crates, ok for now at least
+ // std testing crates, okay for now at least
"src/libcore/tests",
"src/liballoc/tests/lib.rs",
@@ -79,7 +79,7 @@
pub fn check(path: &Path, bad: &mut bool) {
let mut contents = String::new();
- // Sanity check that the complex parsing here works
+ // Sanity check that the complex parsing here works.
let mut saw_target_arch = false;
let mut saw_cfg_bang = false;
super::walk(path, &mut super::filter_dirs, &mut |file| {
@@ -104,7 +104,7 @@
// For now it's ok to have platform-specific code after 'mod tests'.
let mod_tests_idx = find_test_mod(contents);
let contents = &contents[..mod_tests_idx];
- // Pull out all "cfg(...)" and "cfg!(...)" strings
+ // Pull out all `cfg(...)` and `cfg!(...)` strings.
let cfgs = parse_cfgs(contents);
let mut line_numbers: Option<Vec<usize>> = None;
@@ -121,7 +121,7 @@
};
for (idx, cfg) in cfgs {
- // Sanity check that the parsing here works
+ // Sanity check that the parsing here works.
if !*saw_target_arch && cfg.contains("target_arch") { *saw_target_arch = true }
if !*saw_cfg_bang && cfg.contains("cfg!") { *saw_cfg_bang = true }
@@ -153,7 +153,7 @@
fn find_test_mod(contents: &str) -> usize {
if let Some(mod_tests_idx) = contents.find("mod tests") {
- // Also capture a previous line indicating "mod tests" in cfg-ed out
+ // Also capture a previous line indicating that "mod tests" is cfg'd out.
let prev_newline_idx = contents[..mod_tests_idx].rfind('\n').unwrap_or(mod_tests_idx);
let prev_newline_idx = contents[..prev_newline_idx].rfind('\n');
if let Some(nl) = prev_newline_idx {
@@ -176,7 +176,7 @@
let candidate_cfgs = contents.match_indices("cfg");
let candidate_cfg_idxs = candidate_cfgs.map(|(i, _)| i);
// This is puling out the indexes of all "cfg" strings
- // that appear to be tokens succeeded by a paren.
+ // that appear to be tokens followed by a parenthesis.
let cfgs = candidate_cfg_idxs.filter(|i| {
let pre_idx = i.saturating_sub(*i);
let succeeds_non_ident = !contents.as_bytes().get(pre_idx)
diff --git a/src/tools/tidy/src/style.rs b/src/tools/tidy/src/style.rs
index 42e803b..df54afe 100644
--- a/src/tools/tidy/src/style.rs
+++ b/src/tools/tidy/src/style.rs
@@ -2,12 +2,12 @@
//!
//! Example checks are:
//!
-//! * No lines over 100 characters
-//! * No tabs
-//! * No trailing whitespace
-//! * No CR characters
-//! * No `TODO` or `XXX` directives
-//! * No unexplained ` ```ignore ` or ` ```rust,ignore ` doc tests
+//! * No lines over 100 characters.
+//! * No tabs.
+//! * No trailing whitespace.
+//! * No CR characters.
+//! * No `TODO` or `XXX` directives.
+//! * No unexplained ` ```ignore ` or ` ```rust,ignore ` doc tests.
//!
//! A number of these checks can be opted-out of with various directives like
//! `// ignore-tidy-linelength`.
@@ -34,15 +34,17 @@
when executed when assertions are disabled.
Use llvm::report_fatal_error for increased robustness.";
-/// Parser states for line_is_url.
+/// Parser states for `line_is_url`.
#[derive(PartialEq)]
#[allow(non_camel_case_types)]
-enum LIUState { EXP_COMMENT_START,
- EXP_LINK_LABEL_OR_URL,
- EXP_URL,
- EXP_END }
+enum LIUState {
+ EXP_COMMENT_START,
+ EXP_LINK_LABEL_OR_URL,
+ EXP_URL,
+ EXP_END,
+}
-/// True if LINE appears to be a line comment containing an URL,
+/// Returns whether `line` appears to be a line comment containing an URL,
/// possibly with a Markdown link label in front, and nothing else.
/// The Markdown link label, if present, may not contain whitespace.
/// Lines of this form are allowed to be overlength, because Markdown
@@ -77,7 +79,7 @@
state == EXP_END
}
-/// True if LINE is allowed to be longer than the normal limit.
+/// Returns whether `line` is allowed to be longer than the normal limit.
/// Currently there is only one exception, for long URLs, but more
/// may be added in the future.
fn long_line_is_ok(line: &str) -> bool {
@@ -109,6 +111,7 @@
let skip_tab = contents.contains("ignore-tidy-tab");
let skip_length = contents.contains("ignore-tidy-linelength");
let skip_end_whitespace = contents.contains("ignore-tidy-end-whitespace");
+ let skip_copyright = contents.contains("ignore-tidy-copyright");
let mut trailing_new_lines = 0;
for (i, line) in contents.split('\n').enumerate() {
let mut err = |msg: &str| {
@@ -118,13 +121,13 @@
&& !long_line_is_ok(line) {
err(&format!("line longer than {} chars", COLS));
}
- if line.contains('\t') && !skip_tab {
+ if !skip_tab && line.contains('\t') {
err("tab character");
}
if !skip_end_whitespace && (line.ends_with(' ') || line.ends_with('\t')) {
err("trailing whitespace");
}
- if line.contains('\r') && !skip_cr {
+ if !skip_cr && line.contains('\r') {
err("CR character");
}
if filename != "style.rs" {
@@ -135,6 +138,13 @@
err("XXX is deprecated; use FIXME")
}
}
+ if !skip_copyright && (line.starts_with("// Copyright") ||
+ line.starts_with("# Copyright") ||
+ line.starts_with("Copyright"))
+ && (line.contains("Rust Developers") ||
+ line.contains("Rust Project Developers")) {
+ err("copyright notices attributed to the Rust Project Developers are deprecated");
+ }
if line.ends_with("```ignore") || line.ends_with("```rust,ignore") {
err(UNEXPLAINED_IGNORE_DOCTEST_INFO);
}
diff --git a/src/tools/tidy/src/ui_tests.rs b/src/tools/tidy/src/ui_tests.rs
index fa71980..b572b52 100644
--- a/src/tools/tidy/src/ui_tests.rs
+++ b/src/tools/tidy/src/ui_tests.rs
@@ -10,14 +10,16 @@
&mut |file_path| {
if let Some(ext) = file_path.extension() {
if ext == "stderr" || ext == "stdout" {
- // Test output filenames have the format:
+ // Test output filenames have one of the formats:
+ // ```
// $testname.stderr
// $testname.$mode.stderr
// $testname.$revision.stderr
// $testname.$revision.$mode.stderr
+ // ```
//
// For now, just make sure that there is a corresponding
- // $testname.rs file.
+ // `$testname.rs` file.
let testname = file_path
.file_name()
.unwrap()
diff --git a/src/tools/tidy/src/unstable_book.rs b/src/tools/tidy/src/unstable_book.rs
index c09a049..bd3b1f0 100644
--- a/src/tools/tidy/src/unstable_book.rs
+++ b/src/tools/tidy/src/unstable_book.rs
@@ -11,22 +11,24 @@
pub const LIB_FEATURES_DIR: &str = "library-features";
-/// Build the path to the Unstable Book source directory from the Rust 'src' directory
+/// Builds the path to the Unstable Book source directory from the Rust 'src' directory.
pub fn unstable_book_path(base_src_path: &path::Path) -> path::PathBuf {
base_src_path.join(PATH_STR)
}
-/// Directory where the features are documented within the Unstable Book source directory
+/// Builds the path to the directory where the features are documented within the Unstable Book
+/// source directory.
pub fn unstable_book_lang_features_path(base_src_path: &path::Path) -> path::PathBuf {
unstable_book_path(base_src_path).join(LANG_FEATURES_DIR)
}
-/// Directory where the features are documented within the Unstable Book source directory
+/// Builds the path to the directory where the features are documented within the Unstable Book
+/// source directory.
pub fn unstable_book_lib_features_path(base_src_path: &path::Path) -> path::PathBuf {
unstable_book_path(base_src_path).join(LIB_FEATURES_DIR)
}
-/// Test to determine if DirEntry is a file
+/// Tests whether `DirEntry` is a file.
fn dir_entry_is_file(dir_entry: &fs::DirEntry) -> bool {
dir_entry
.file_type()
@@ -34,7 +36,7 @@
.is_file()
}
-/// Retrieve names of all unstable features
+/// Retrieves names of all unstable features.
pub fn collect_unstable_feature_names(features: &Features) -> BTreeSet<String> {
features
.iter()
@@ -56,24 +58,23 @@
/// Retrieve file names of all library feature sections in the Unstable Book with:
///
-/// * hyphens replaced by underscores
-/// * the markdown suffix ('.md') removed
+/// * hyphens replaced by underscores,
+/// * the markdown suffix ('.md') removed.
fn collect_unstable_book_lang_features_section_file_names(base_src_path: &path::Path)
-> BTreeSet<String> {
collect_unstable_book_section_file_names(&unstable_book_lang_features_path(base_src_path))
}
-/// Retrieve file names of all language feature sections in the Unstable Book with:
+/// Retrieves file names of all language feature sections in the Unstable Book with:
///
-/// * hyphens replaced by underscores
-/// * the markdown suffix ('.md') removed
+/// * hyphens replaced by underscores,
+/// * the markdown suffix ('.md') removed.
fn collect_unstable_book_lib_features_section_file_names(base_src_path: &path::Path)
-> BTreeSet<String> {
collect_unstable_book_section_file_names(&unstable_book_lib_features_path(base_src_path))
}
pub fn check(path: &path::Path, bad: &mut bool) {
-
// Library features
let lang_features = collect_lang_features(path, bad);
@@ -100,7 +101,7 @@
let unstable_book_lang_features_section_file_names =
collect_unstable_book_lang_features_section_file_names(path);
- // Check for Unstable Book sections that don't have a corresponding unstable feature
+ // Check for Unstable Book sections that don't have a corresponding unstable feature.
for feature_name in &unstable_book_lang_features_section_file_names -
&unstable_lang_feature_names {
tidy_error!(bad,
@@ -109,8 +110,8 @@
feature_name)
}
- // List unstable features that don't have Unstable Book sections
- // Remove the comment marker if you want the list printed
+ // List unstable features that don't have Unstable Book sections.
+ // Remove the comment marker if you want the list printed.
/*
println!("Lib features without unstable book sections:");
for feature_name in &unstable_lang_feature_names -