|
|
|
# Documentation for this configuration file can be found here
|
|
|
|
# https://embarkstudios.github.io/cargo-deny/checks/cfg.html
|
|
|
|
|
|
|
|
targets = [
|
|
|
|
{ triple = "x86_64-unknown-linux-gnu" },
|
|
|
|
{ triple = "x86_64-apple-darwin" },
|
|
|
|
{ triple = "x86_64-pc-windows-msvc" },
|
|
|
|
{ triple = "aarch64-linux-android" },
|
|
|
|
]
|
|
|
|
|
|
|
|
# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html
|
|
|
|
[licenses]
|
|
|
|
allow = [
|
|
|
|
"Apache-2.0 WITH LLVM-exception",
|
|
|
|
"Apache-2.0",
|
|
|
|
"BSD-2-Clause",
|
|
|
|
"CC0-1.0",
|
|
|
|
"ISC",
|
|
|
|
"MIT",
|
|
|
|
"MPL-2.0",
|
|
|
|
"Zlib",
|
|
|
|
]
|
|
|
|
|
|
|
|
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
|
|
|
|
[bans]
|
|
|
|
multiple-versions = "deny"
|
|
|
|
wildcards = "allow"
|
|
|
|
deny = []
|
|
|
|
|
|
|
|
# Skip some multiple-versions checks, until they can be fixed.
|
|
|
|
skip = [
|
|
|
|
{ name = "ansi_term" }, # transitive dependencies only
|
|
|
|
{ name = "env_logger" }, # pretty_env_logger and file-per-thread-logger depend on 0.7
|
|
|
|
{ name = "humantime" }, # caused by env_logger
|
|
|
|
{ name = "wast" }, # old one pulled in by witx
|
|
|
|
{ name = "quick-error" }, # transitive dependencies
|
Initial ISLE integration with the x64 backend
On the build side, this commit introduces two things:
1. The automatic generation of various ISLE definitions for working with
CLIF. Specifically, it generates extern type definitions for clif opcodes and
the clif instruction data `enum`, as well as extractors for matching each clif
instructions. This happens inside the `cranelift-codegen-meta` crate.
2. The compilation of ISLE DSL sources to Rust code, that can be included in the
main `cranelift-codegen` compilation.
Next, this commit introduces the integration glue code required to get
ISLE-generated Rust code hooked up in clif-to-x64 lowering. When lowering a clif
instruction, we first try to use the ISLE code path. If it succeeds, then we are
done lowering this instruction. If it fails, then we proceed along the existing
hand-written code path for lowering.
Finally, this commit ports many lowering rules over from hand-written,
open-coded Rust to ISLE.
In the process of supporting ISLE, this commit also makes the x64 `Inst` capable
of expressing SSA by supporting 3-operand forms for all of the existing
instructions that only have a 2-operand form encoding:
dst = src1 op src2
Rather than only the typical x86-64 2-operand form:
dst = dst op src
This allows `MachInst` to be in SSA form, since `dst` and `src1` are
disentangled.
("3-operand" and "2-operand" are a little bit of a misnomer since not all
operations are binary operations, but we do the same thing for, e.g., unary
operations by disentangling the sole operand from the result.)
There are two motivations for this change:
1. To allow ISLE lowering code to have value-equivalence semantics. We want ISLE
lowering to translate a CLIF expression that evaluates to some value into a
`MachInst` expression that evaluates to the same value. We want both the
lowering itself and the resulting `MachInst` to be pure and referentially
transparent. This is both a nice paradigm for compiler writers that are
authoring and maintaining lowering rules and is a prerequisite to any sort of
formal verification of our lowering rules in the future.
2. Better align `MachInst` with `regalloc2`'s API, which requires that the input
be in SSA form.
3 years ago
|
|
|
{ name = "textwrap" }, # `miette` and `clap` depend on different versions
|
|
|
|
{ name = "itoa" }, # `rustix` and `criterion` depend on different versions
|
|
|
|
]
|