Merge pull request #2718 from cfallin/new-backend
Switch default to new x86_64 backend.
This commit is contained in:
41
.github/workflows/main.yml
vendored
41
.github/workflows/main.yml
vendored
@@ -286,7 +286,7 @@ jobs:
|
||||
# Test debug (DWARF) related functionality on new backend.
|
||||
- run: |
|
||||
sudo apt-get update && sudo apt-get install -y gdb lldb
|
||||
cargo test --features experimental_x64 test_debug_dwarf -- --ignored --test-threads 1 --test debug::
|
||||
cargo test test_debug_dwarf -- --ignored --test-threads 1 --test debug::
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
@@ -309,10 +309,9 @@ jobs:
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
|
||||
# Perform all tests (debug mode) for `wasmtime` with the experimental x64
|
||||
# backend.
|
||||
# Perform all tests (debug mode) for `wasmtime` with the old x86 backend.
|
||||
test_x64:
|
||||
name: Test x64 new backend
|
||||
name: Test old x86 backend
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@@ -328,38 +327,8 @@ jobs:
|
||||
- run: rustup target add wasm32-wasi
|
||||
- run: rustup target add wasm32-unknown-unknown
|
||||
|
||||
# Run the x64 CI script.
|
||||
- run: ./ci/run-experimental-x64-ci.sh
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
|
||||
# Perform tests on the new x64 backend on Windows as well.
|
||||
test_x64_win:
|
||||
name: Test x64 new backend on Windows
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
- uses: ./.github/actions/install-rust
|
||||
- uses: ./.github/actions/define-llvm-env
|
||||
|
||||
- name: Install libclang
|
||||
# Note: libclang is pre-installed on the macOS and linux images.
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
curl https://releases.llvm.org/9.0.0/LLVM-9.0.0-win64.exe -o llvm-installer.exe
|
||||
7z x llvm-installer.exe -oC:/llvm-binary
|
||||
echo LIBCLANG_PATH=C:/llvm-binary/bin/libclang.dll >> $GITHUB_ENV
|
||||
echo C:/llvm-binary/bin >> $GITHUB_PATH
|
||||
|
||||
# Install wasm32 targets in order to build various tests throughout the
|
||||
# repo.
|
||||
- run: rustup target add wasm32-wasi
|
||||
- run: rustup target add wasm32-unknown-unknown
|
||||
|
||||
# Run the x64 CI script.
|
||||
- run: ./ci/run-experimental-x64-ci.sh
|
||||
# Run the old x86 backend CI (we will eventually remove this).
|
||||
- run: ./ci/run-old-x86-ci.sh
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
|
||||
|
||||
@@ -93,9 +93,12 @@ wasi-nn = ["wasmtime-wasi-nn"]
|
||||
uffd = ["wasmtime/uffd"]
|
||||
all-arch = ["wasmtime/all-arch"]
|
||||
|
||||
# Try the experimental, work-in-progress new x86_64 backend. This is not stable
|
||||
# as of June 2020.
|
||||
experimental_x64 = ["wasmtime-jit/experimental_x64"]
|
||||
# Stub feature that does nothing, for Cargo-features compatibility: the new
|
||||
# backend is the default now.
|
||||
experimental_x64 = []
|
||||
|
||||
# Use the old x86 backend.
|
||||
old-x86-backend = ["wasmtime-jit/old-x86-backend"]
|
||||
|
||||
[badges]
|
||||
maintenance = { status = "actively-developed" }
|
||||
|
||||
42
build.rs
42
build.rs
@@ -155,11 +155,8 @@ fn write_testsuite_tests(
|
||||
let testname = extract_name(path);
|
||||
|
||||
writeln!(out, "#[test]")?;
|
||||
if experimental_x64_should_panic(testsuite, &testname, strategy) {
|
||||
writeln!(
|
||||
out,
|
||||
r#"#[cfg_attr(feature = "experimental_x64", should_panic)]"#
|
||||
)?;
|
||||
if x64_should_panic(testsuite, &testname, strategy) {
|
||||
writeln!(out, r#"#[should_panic]"#)?;
|
||||
} else if ignore(testsuite, &testname, strategy) {
|
||||
writeln!(out, "#[ignore]")?;
|
||||
} else if pooling {
|
||||
@@ -186,10 +183,10 @@ fn write_testsuite_tests(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// For experimental_x64 backend features that are not supported yet, mark tests as panicking, so
|
||||
/// For x64 backend features that are not supported yet, mark tests as panicking, so
|
||||
/// they stop "passing" once the features are properly implemented.
|
||||
fn experimental_x64_should_panic(testsuite: &str, testname: &str, strategy: &str) -> bool {
|
||||
if !cfg!(feature = "experimental_x64") || strategy != "Cranelift" {
|
||||
fn x64_should_panic(testsuite: &str, testname: &str, strategy: &str) -> bool {
|
||||
if !platform_is_x64() || strategy != "Cranelift" {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -222,12 +219,11 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
|
||||
_ => (),
|
||||
},
|
||||
"Cranelift" => match (testsuite, testname) {
|
||||
// TODO(#1886): Ignore reference types tests if this isn't x64,
|
||||
// because Cranelift only supports reference types on x64.
|
||||
("reference_types", _) => {
|
||||
return env::var("CARGO_CFG_TARGET_ARCH").unwrap() != "x86_64";
|
||||
("simd", _) if cfg!(feature = "old-x86-backend") => return true, // skip all SIMD tests on old backend.
|
||||
// These are only implemented on x64.
|
||||
("simd", "simd_i64x2_arith2") | ("simd", "simd_boolean") => {
|
||||
return !platform_is_x64() || cfg!(feature = "old-x86-backend")
|
||||
}
|
||||
|
||||
// These are new instructions that are not really implemented in any backend.
|
||||
("simd", "simd_i8x16_arith2")
|
||||
| ("simd", "simd_conversions")
|
||||
@@ -240,22 +236,6 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
|
||||
| ("simd", "simd_i64x2_extmul_i32x4")
|
||||
| ("simd", "simd_int_to_int_extend") => return true,
|
||||
|
||||
// These are only implemented on x64.
|
||||
("simd", "simd_i64x2_arith2") | ("simd", "simd_boolean") => {
|
||||
return !cfg!(feature = "experimental_x64")
|
||||
}
|
||||
|
||||
// These are only implemented on aarch64 and x64.
|
||||
("simd", "simd_i64x2_cmp")
|
||||
| ("simd", "simd_f32x4_pmin_pmax")
|
||||
| ("simd", "simd_f64x2_pmin_pmax")
|
||||
| ("simd", "simd_f32x4_rounding")
|
||||
| ("simd", "simd_f64x2_rounding")
|
||||
| ("simd", "simd_i32x4_dot_i16x8") => {
|
||||
return !(cfg!(feature = "experimental_x64")
|
||||
|| env::var("CARGO_CFG_TARGET_ARCH").unwrap() == "aarch64")
|
||||
}
|
||||
|
||||
_ => {}
|
||||
},
|
||||
_ => panic!("unrecognized strategy"),
|
||||
@@ -263,3 +243,7 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
fn platform_is_x64() -> bool {
|
||||
env::var("CARGO_CFG_TARGET_ARCH").unwrap() == "x86_64"
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
cargo test \
|
||||
--locked \
|
||||
--features test-programs/test_programs \
|
||||
--features experimental_x64 \
|
||||
--features old-x86-backend \
|
||||
--all \
|
||||
--exclude wasmtime-lightbeam \
|
||||
--exclude wasmtime-wasi-nn \
|
||||
@@ -50,7 +50,6 @@ default = ["disas", "wasm", "cranelift-codegen/all-arch", "peepmatic-souper", "s
|
||||
disas = ["capstone"]
|
||||
enable-peepmatic = ["cranelift-codegen/enable-peepmatic", "cranelift-filetests/enable-peepmatic"]
|
||||
wasm = ["wat", "cranelift-wasm"]
|
||||
experimental_x64 = ["cranelift-codegen/x64", "cranelift-filetests/experimental_x64", "cranelift-reader/experimental_x64"]
|
||||
experimental_arm32 = ["cranelift-codegen/arm32", "cranelift-filetests/experimental_arm32"]
|
||||
souper-harvest = ["cranelift-codegen/souper-harvest", "rayon"]
|
||||
all-arch = ["cranelift-codegen/all-arch"]
|
||||
|
||||
@@ -63,9 +63,15 @@ unwind = ["gimli"]
|
||||
x86 = []
|
||||
arm64 = []
|
||||
riscv = []
|
||||
x64 = [] # New work-in-progress codegen backend for x86_64 based on the new isel.
|
||||
arm32 = [] # Work-in-progress codegen backend for ARM.
|
||||
|
||||
# Stub feature that does nothing, for Cargo-features compatibility: the new
|
||||
# backend is the default now.
|
||||
experimental_x64 = []
|
||||
|
||||
# Make the old x86 backend the default.
|
||||
old-x86-backend = []
|
||||
|
||||
# Option to enable all architectures.
|
||||
all-arch = [
|
||||
"x86",
|
||||
|
||||
@@ -74,16 +74,15 @@ use thiserror::Error;
|
||||
#[cfg(feature = "riscv")]
|
||||
mod riscv;
|
||||
|
||||
// N.B.: the old x86-64 backend (`x86`) and the new one (`x64`) can both be
|
||||
// included; if the new backend is included, then it is the default backend
|
||||
// returned for an x86-64 triple, but a specific option can request the old
|
||||
// backend. It is important to have the ability to instantiate *both* backends
|
||||
// in the same build so that we can do things like differential fuzzing between
|
||||
// backends, or perhaps offer a runtime configuration flag in the future.
|
||||
// N.B.: the old x86-64 backend (`x86`) and the new one (`x64`) are both
|
||||
// included whenever building with x86 support. The new backend is the default,
|
||||
// but the old can be requested with `BackendVariant::Legacy`. However, if this
|
||||
// crate is built with the `old-x86-backend` feature, then the old backend is
|
||||
// default instead.
|
||||
#[cfg(feature = "x86")]
|
||||
mod x86;
|
||||
|
||||
#[cfg(feature = "x64")]
|
||||
#[cfg(feature = "x86")]
|
||||
mod x64;
|
||||
|
||||
#[cfg(feature = "arm32")]
|
||||
@@ -122,7 +121,7 @@ macro_rules! isa_builder {
|
||||
/// The "variant" for a given target. On one platform (x86-64), we have two
|
||||
/// backends, the "old" and "new" one; the new one is the default if included
|
||||
/// in the build configuration and not otherwise specified.
|
||||
#[derive(Clone, Copy)]
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub enum BackendVariant {
|
||||
/// Any backend available.
|
||||
Any,
|
||||
@@ -149,13 +148,13 @@ pub fn lookup_variant(triple: Triple, variant: BackendVariant) -> Result<Builder
|
||||
isa_builder!(x86, (feature = "x86"), triple)
|
||||
}
|
||||
(Architecture::X86_64, BackendVariant::MachInst) => {
|
||||
isa_builder!(x64, (feature = "x64"), triple)
|
||||
isa_builder!(x64, (feature = "x86"), triple)
|
||||
}
|
||||
#[cfg(feature = "x64")]
|
||||
#[cfg(not(feature = "old-x86-backend"))]
|
||||
(Architecture::X86_64, BackendVariant::Any) => {
|
||||
isa_builder!(x64, (feature = "x64"), triple)
|
||||
isa_builder!(x64, (feature = "x86"), triple)
|
||||
}
|
||||
#[cfg(not(feature = "x64"))]
|
||||
#[cfg(feature = "old-x86-backend")]
|
||||
(Architecture::X86_64, BackendVariant::Any) => {
|
||||
isa_builder!(x86, (feature = "x86"), triple)
|
||||
}
|
||||
@@ -277,7 +276,13 @@ pub trait TargetIsa: fmt::Display + Send + Sync {
|
||||
/// Get the ISA-dependent flag values that were used to make this trait object.
|
||||
fn isa_flags(&self) -> Vec<settings::Value>;
|
||||
|
||||
/// Hashes all flags, both ISA-independent and ISA-dependent, into the specified hasher.
|
||||
/// Get the variant of this ISA (Legacy or MachInst).
|
||||
fn variant(&self) -> BackendVariant {
|
||||
BackendVariant::Legacy
|
||||
}
|
||||
|
||||
/// Hashes all flags, both ISA-independent and ISA-specific, into the
|
||||
/// specified hasher.
|
||||
fn hash_all_flags(&self, hasher: &mut dyn Hasher);
|
||||
|
||||
/// Get the default calling convention of this target.
|
||||
|
||||
@@ -8,9 +8,7 @@ use log::warn;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[cfg(feature = "x64")]
|
||||
use crate::binemit::CodeOffset;
|
||||
#[cfg(feature = "x64")]
|
||||
use crate::isa::unwind::UnwindInst;
|
||||
|
||||
/// Maximum (inclusive) size of a "small" stack allocation
|
||||
@@ -334,10 +332,8 @@ impl UnwindInfo {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "x64")]
|
||||
const UNWIND_RBP_REG: u8 = 5;
|
||||
|
||||
#[cfg(feature = "x64")]
|
||||
pub(crate) fn create_unwind_info_from_insts<MR: RegisterMapper<regalloc::Reg>>(
|
||||
insts: &[(CodeOffset, UnwindInst)],
|
||||
) -> CodegenResult<UnwindInfo> {
|
||||
|
||||
@@ -109,6 +109,7 @@ mod tests {
|
||||
use target_lexicon::triple;
|
||||
|
||||
#[test]
|
||||
#[cfg_attr(feature = "old-x86-backend", ignore)]
|
||||
fn test_simple_func() {
|
||||
let isa = lookup(triple!("x86_64"))
|
||||
.expect("expect x86 ISA")
|
||||
@@ -151,6 +152,7 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg_attr(feature = "old-x86-backend", ignore)]
|
||||
fn test_multi_return_func() {
|
||||
let isa = lookup(triple!("x86_64"))
|
||||
.expect("expect x86 ISA")
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
use crate::binemit;
|
||||
use crate::ir;
|
||||
use crate::isa::{EncInfo, Encoding, Encodings, Legalize, RegClass, RegInfo, TargetIsa};
|
||||
use crate::isa::{
|
||||
BackendVariant, EncInfo, Encoding, Encodings, Legalize, RegClass, RegInfo, TargetIsa,
|
||||
};
|
||||
use crate::machinst::*;
|
||||
use crate::regalloc::RegisterSet;
|
||||
use crate::settings::{self, Flags};
|
||||
@@ -62,6 +64,10 @@ impl TargetIsa for TargetIsaAdapter {
|
||||
self.backend.isa_flags()
|
||||
}
|
||||
|
||||
fn variant(&self) -> BackendVariant {
|
||||
BackendVariant::MachInst
|
||||
}
|
||||
|
||||
fn hash_all_flags(&self, hasher: &mut dyn Hasher) {
|
||||
self.backend.hash_all_flags(hasher);
|
||||
}
|
||||
|
||||
@@ -30,4 +30,3 @@ anyhow = "1.0.32"
|
||||
[features]
|
||||
enable-peepmatic = []
|
||||
experimental_arm32 = []
|
||||
experimental_x64 = []
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %amode_add(i64, i64) -> i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f0(b1, i32, i32) -> i32 {
|
||||
; check: pushq %rbp
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %ctz(i64, i64) -> i8 {
|
||||
block0(v0: i64, v1: i64):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %reverse_bits_zero() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f0(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64 has_lzcnt
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst has_lzcnt
|
||||
|
||||
function %clz(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f0(i64, i64) -> i64, i64 {
|
||||
block0(v0: i64, v1: i64):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64 has_bmi1
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst has_bmi1
|
||||
|
||||
function %ctz(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test run
|
||||
set avoid_div_traps=false
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f0(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set avoid_div_traps=false
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
;; We should get the checked-div/rem sequence (`srem` pseudoinst below) even
|
||||
;; when `avoid_div_traps` above is false (i.e. even when the host is normally
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
test compile
|
||||
set enable_llvm_abi_extensions=true
|
||||
set unwind_info=true
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f0(i64, i64, i64, i64) -> i64 windows_fastcall {
|
||||
block0(v0: i64, v1: i64, v2: i64, v3: i64):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f(f64) -> f64 {
|
||||
block0(v0: f64):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f(i32, i64 vmctx) -> i64 {
|
||||
gv0 = vmctx
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set enable_llvm_abi_extensions=true
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f0(i128, i128) -> i128 {
|
||||
; check: pushq %rbp
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %test_icmp_eq_i128() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %add_from_mem_u32_1(i64, i32) -> i32 {
|
||||
block0(v0: i64, v1: i32):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set enable_simd
|
||||
target x86_64 skylake
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst skylake
|
||||
|
||||
function %move_registers(i32x4) -> b8x16 {
|
||||
block0(v0: i32x4):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64 has_popcnt has_sse42
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst has_popcnt has_sse42
|
||||
|
||||
function %popcnt(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %popcnt64(i64) -> i64 {
|
||||
block0(v0: i64):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set enable_probestack=true
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f1() -> i64 {
|
||||
ss0 = explicit_slot 100000
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %test_compare_i32() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set enable_llvm_abi_extensions=true
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f0(i32, i128, i128) -> i128 {
|
||||
; check: pushq %rbp
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %ishl(i64, i64, i8) -> i64, i64 {
|
||||
block0(v0: i64, v1: i64, v2: i8):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test run
|
||||
set enable_simd
|
||||
target x86_64 skylake
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst skylake
|
||||
|
||||
function %iadd_i32x4(i32x4, i32x4) -> i32x4 {
|
||||
block0(v0:i32x4, v1:i32x4):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set enable_simd
|
||||
target x86_64 skylake
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst skylake
|
||||
|
||||
function %bitselect_i16x8() -> i16x8 {
|
||||
block0:
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test run
|
||||
set enable_simd
|
||||
target x86_64 skylake
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst skylake
|
||||
|
||||
function %bitselect_i8x16(i8x16, i8x16, i8x16) -> i8x16 {
|
||||
block0(v0: i8x16, v1: i8x16, v2: i8x16):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set enable_simd
|
||||
target x86_64 skylake
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst skylake
|
||||
|
||||
function %icmp_ne_32x4(i32x4, i32x4) -> b32x4 {
|
||||
block0(v0: i32x4, v1: i32x4):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test run
|
||||
set enable_simd
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %icmp_eq_i8x16() -> b8 {
|
||||
block0:
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test run
|
||||
set enable_simd
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %fcvt_from_sint() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set enable_simd
|
||||
target x86_64 has_ssse3 has_sse41
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst has_ssse3 has_sse41
|
||||
|
||||
;; shuffle
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test run
|
||||
set enable_simd
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
;; shuffle
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set enable_simd
|
||||
target x86_64 skylake
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst skylake
|
||||
|
||||
function %bnot_b32x4(b32x4) -> b32x4 {
|
||||
block0(v0: b32x4):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test run
|
||||
set enable_simd
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %bnot() -> b32 {
|
||||
block0:
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function u0:0(i64 sarg(64)) -> i8 system_v {
|
||||
block0(v0: i64):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %f0(i64 sret) {
|
||||
block0(v0: i64):
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
test compile
|
||||
set tls_model=elf_gd
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function u0:0(i32) -> i64 {
|
||||
gv0 = symbol colocated tls u1:0
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
function %elide_uextend_add(i32, i32) -> i64 {
|
||||
block0(v0: i32, v1: i32):
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
feature "experimental_x64"
|
||||
target x86_64 machinst
|
||||
|
||||
;; From: https://github.com/bytecodealliance/wasmtime/issues/2670
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test regalloc
|
||||
target i686
|
||||
target i686 legacy
|
||||
|
||||
; %rdi can't be used in a movsbl instruction, so test that the register
|
||||
; allocator can move it to a register that can be.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
function %foo(i64, i64, i64, i32) -> b1 system_v {
|
||||
block3(v0: i64, v1: i64, v2: i64, v3: i32):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; Test the legalization of function signatures.
|
||||
test legalizer
|
||||
target i686
|
||||
target i686 legacy
|
||||
|
||||
; regex: V=v\d+
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; Test the legalization of function signatures.
|
||||
test legalizer
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
; regex: V=v\d+
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
test binemit
|
||||
set opt_level=speed_and_size
|
||||
set emit_all_ones_funcaddrs
|
||||
target i686 haswell
|
||||
target i686 legacy haswell
|
||||
|
||||
; The binary encodings can be verified with the command:
|
||||
;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
test binemit
|
||||
set opt_level=speed_and_size
|
||||
set emit_all_ones_funcaddrs
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
; The binary encodings can be verified with the command:
|
||||
;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
test compile
|
||||
set enable_probestack=false
|
||||
target i686
|
||||
target i686 legacy
|
||||
|
||||
function u0:0(i32 vmctx) baldrdash_system_v {
|
||||
sig0 = (i32 vmctx, i32 sigid) baldrdash_system_v
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64 baseline
|
||||
target x86_64 legacy baseline
|
||||
|
||||
|
||||
; clz/ctz on 64 bit operands
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
test binemit
|
||||
set opt_level=speed_and_size
|
||||
target x86_64 baseline
|
||||
target x86_64 legacy baseline
|
||||
|
||||
; The binary encodings can be verified with the command:
|
||||
;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; Binary emission of 32-bit floating point code.
|
||||
test binemit
|
||||
target i686 haswell
|
||||
target i686 legacy haswell
|
||||
|
||||
; The binary encodings can be verified with the command:
|
||||
;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; binary emission of x86-32 code.
|
||||
test binemit
|
||||
set opt_level=speed_and_size
|
||||
target i686 haswell
|
||||
target i686 legacy haswell
|
||||
|
||||
; The binary encodings can be verified with the command:
|
||||
;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; Binary emission of 64-bit floating point code.
|
||||
test binemit
|
||||
set opt_level=speed_and_size
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
; The binary encodings can be verified with the command:
|
||||
;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
test binemit
|
||||
set opt_level=speed_and_size
|
||||
set is_pic
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
; The binary encodings can be verified with the command:
|
||||
;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
; this verifies that returning b64 immediates does not result in a segmentation fault, see https://github.com/bytecodealliance/cranelift/issues/911
|
||||
function %test_b64() -> b64 {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; binary emission of x86-64 code.
|
||||
test binemit
|
||||
set opt_level=speed_and_size
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
; The binary encodings can be verified with the command:
|
||||
;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function %reverse_bits_zero() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
test binemit
|
||||
test run
|
||||
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:323() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function %br_false() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0(i128) -> i8 fast {
|
||||
block0(v0: i128):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target i686
|
||||
target i686 legacy
|
||||
|
||||
function u0:0(i32, i32) -> i32 {
|
||||
block0(v0: i32, v1: i32):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test run
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test run
|
||||
target i686
|
||||
target i686 legacy
|
||||
|
||||
function u0:0() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target i686
|
||||
target i686 legacy
|
||||
|
||||
function u0:0() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; Check that floating-point and integer constants equal to zero are optimized correctly.
|
||||
test binemit
|
||||
target i686
|
||||
target i686 legacy
|
||||
|
||||
function %foo() -> f32 fast {
|
||||
block0:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; Check that floating-point constants equal to zero are optimized correctly.
|
||||
test binemit
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function %zero_const_32bit_no_rex() -> f32 fast {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0() -> i128 system_v {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0(i64, i64) -> i128 fast {
|
||||
block0(v0: i64, v1: i64):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test run
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
function %test_icmp_eq_i128() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test run
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
function %test_imul_i128() -> b1 {
|
||||
block0:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0(i16) -> i8 fast {
|
||||
block0(v0: i16):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0(i64, i64) -> i128 system_v {
|
||||
block0(v0: i64, v1: i64):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
test compile
|
||||
set opt_level=speed_and_size
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0(i8) -> i8 fast {
|
||||
block0(v0: i8):
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0(i128) system_v {
|
||||
block0(v0: i128):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
test compile
|
||||
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0() -> i8 fast {
|
||||
block0:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
test compile
|
||||
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:51(i64, i64) system_v {
|
||||
ss0 = explicit_slot 0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
test legalizer
|
||||
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function %br_icmp(i64) fast {
|
||||
block0(v0: i64):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
test compile
|
||||
set opt_level=speed_and_size
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
; regex: V=v\d+
|
||||
; regex: BB=block\d+
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
; regex: V=v\d+
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; Test legalization of a non-colocated call in 64-bit non-PIC mode.
|
||||
test legalizer
|
||||
set opt_level=speed_and_size
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
function %call() {
|
||||
fn0 = %foo()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
; regex: V=v\d+
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
; Test the custom legalizations.
|
||||
test legalizer
|
||||
target i686
|
||||
target x86_64
|
||||
target i686 legacy
|
||||
target x86_64 legacy
|
||||
|
||||
; regex: V=v\d+
|
||||
; regex: BB=block\d+
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
test legalizer
|
||||
; See also legalize-div.clif.
|
||||
set avoid_div_traps=1
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
; regex: V=v\d+
|
||||
; regex: BB=block\d+
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
test legalizer
|
||||
; See also legalize-div-traps.clif.
|
||||
set avoid_div_traps=0
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
; regex: V=v\d+
|
||||
; regex: BB=block\d+
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; Test the legalization of f64const.
|
||||
test legalizer
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
; regex: V=v\d+
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
test compile
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
function u0:0(i16) -> f64 fast {
|
||||
block0(v0: i16):
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
test legalizer
|
||||
set enable_heap_access_spectre_mitigation=false
|
||||
target x86_64
|
||||
target x86_64 legacy
|
||||
|
||||
; Test legalization for various forms of heap addresses.
|
||||
; regex: BB=block\d+
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
; Test the legalization of i128 instructions on x86_64.
|
||||
test legalizer
|
||||
target x86_64 haswell
|
||||
target x86_64 legacy haswell
|
||||
|
||||
; regex: V=v\d+
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user