Merge pull request #2718 from cfallin/new-backend

Switch default to new x86_64 backend.
This commit is contained in:
Chris Fallin
2021-04-05 09:38:08 -07:00
committed by GitHub
243 changed files with 316 additions and 442 deletions

View File

@@ -286,7 +286,7 @@ jobs:
# Test debug (DWARF) related functionality on new backend. # Test debug (DWARF) related functionality on new backend.
- run: | - run: |
sudo apt-get update && sudo apt-get install -y gdb lldb 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' if: matrix.os == 'ubuntu-latest'
env: env:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
@@ -309,10 +309,9 @@ jobs:
env: env:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
# Perform all tests (debug mode) for `wasmtime` with the experimental x64 # Perform all tests (debug mode) for `wasmtime` with the old x86 backend.
# backend.
test_x64: test_x64:
name: Test x64 new backend name: Test old x86 backend
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@@ -328,38 +327,8 @@ jobs:
- run: rustup target add wasm32-wasi - run: rustup target add wasm32-wasi
- run: rustup target add wasm32-unknown-unknown - run: rustup target add wasm32-unknown-unknown
# Run the x64 CI script. # Run the old x86 backend CI (we will eventually remove this).
- run: ./ci/run-experimental-x64-ci.sh - run: ./ci/run-old-x86-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
env: env:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1

View File

@@ -93,9 +93,12 @@ wasi-nn = ["wasmtime-wasi-nn"]
uffd = ["wasmtime/uffd"] uffd = ["wasmtime/uffd"]
all-arch = ["wasmtime/all-arch"] all-arch = ["wasmtime/all-arch"]
# Try the experimental, work-in-progress new x86_64 backend. This is not stable # Stub feature that does nothing, for Cargo-features compatibility: the new
# as of June 2020. # backend is the default now.
experimental_x64 = ["wasmtime-jit/experimental_x64"] experimental_x64 = []
# Use the old x86 backend.
old-x86-backend = ["wasmtime-jit/old-x86-backend"]
[badges] [badges]
maintenance = { status = "actively-developed" } maintenance = { status = "actively-developed" }

View File

@@ -155,11 +155,8 @@ fn write_testsuite_tests(
let testname = extract_name(path); let testname = extract_name(path);
writeln!(out, "#[test]")?; writeln!(out, "#[test]")?;
if experimental_x64_should_panic(testsuite, &testname, strategy) { if x64_should_panic(testsuite, &testname, strategy) {
writeln!( writeln!(out, r#"#[should_panic]"#)?;
out,
r#"#[cfg_attr(feature = "experimental_x64", should_panic)]"#
)?;
} else if ignore(testsuite, &testname, strategy) { } else if ignore(testsuite, &testname, strategy) {
writeln!(out, "#[ignore]")?; writeln!(out, "#[ignore]")?;
} else if pooling { } else if pooling {
@@ -186,10 +183,10 @@ fn write_testsuite_tests(
Ok(()) 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. /// they stop "passing" once the features are properly implemented.
fn experimental_x64_should_panic(testsuite: &str, testname: &str, strategy: &str) -> bool { fn x64_should_panic(testsuite: &str, testname: &str, strategy: &str) -> bool {
if !cfg!(feature = "experimental_x64") || strategy != "Cranelift" { if !platform_is_x64() || strategy != "Cranelift" {
return false; return false;
} }
@@ -222,12 +219,11 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
_ => (), _ => (),
}, },
"Cranelift" => match (testsuite, testname) { "Cranelift" => match (testsuite, testname) {
// TODO(#1886): Ignore reference types tests if this isn't x64, ("simd", _) if cfg!(feature = "old-x86-backend") => return true, // skip all SIMD tests on old backend.
// because Cranelift only supports reference types on x64. // These are only implemented on x64.
("reference_types", _) => { ("simd", "simd_i64x2_arith2") | ("simd", "simd_boolean") => {
return env::var("CARGO_CFG_TARGET_ARCH").unwrap() != "x86_64"; return !platform_is_x64() || cfg!(feature = "old-x86-backend")
} }
// These are new instructions that are not really implemented in any backend. // These are new instructions that are not really implemented in any backend.
("simd", "simd_i8x16_arith2") ("simd", "simd_i8x16_arith2")
| ("simd", "simd_conversions") | ("simd", "simd_conversions")
@@ -240,22 +236,6 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
| ("simd", "simd_i64x2_extmul_i32x4") | ("simd", "simd_i64x2_extmul_i32x4")
| ("simd", "simd_int_to_int_extend") => return true, | ("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"), _ => panic!("unrecognized strategy"),
@@ -263,3 +243,7 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool {
false false
} }
fn platform_is_x64() -> bool {
env::var("CARGO_CFG_TARGET_ARCH").unwrap() == "x86_64"
}

View File

@@ -3,7 +3,7 @@
cargo test \ cargo test \
--locked \ --locked \
--features test-programs/test_programs \ --features test-programs/test_programs \
--features experimental_x64 \ --features old-x86-backend \
--all \ --all \
--exclude wasmtime-lightbeam \ --exclude wasmtime-lightbeam \
--exclude wasmtime-wasi-nn \ --exclude wasmtime-wasi-nn \

View File

@@ -50,7 +50,6 @@ default = ["disas", "wasm", "cranelift-codegen/all-arch", "peepmatic-souper", "s
disas = ["capstone"] disas = ["capstone"]
enable-peepmatic = ["cranelift-codegen/enable-peepmatic", "cranelift-filetests/enable-peepmatic"] enable-peepmatic = ["cranelift-codegen/enable-peepmatic", "cranelift-filetests/enable-peepmatic"]
wasm = ["wat", "cranelift-wasm"] 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"] experimental_arm32 = ["cranelift-codegen/arm32", "cranelift-filetests/experimental_arm32"]
souper-harvest = ["cranelift-codegen/souper-harvest", "rayon"] souper-harvest = ["cranelift-codegen/souper-harvest", "rayon"]
all-arch = ["cranelift-codegen/all-arch"] all-arch = ["cranelift-codegen/all-arch"]

View File

@@ -63,9 +63,15 @@ unwind = ["gimli"]
x86 = [] x86 = []
arm64 = [] arm64 = []
riscv = [] riscv = []
x64 = [] # New work-in-progress codegen backend for x86_64 based on the new isel.
arm32 = [] # Work-in-progress codegen backend for ARM. 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. # Option to enable all architectures.
all-arch = [ all-arch = [
"x86", "x86",

View File

@@ -74,16 +74,15 @@ use thiserror::Error;
#[cfg(feature = "riscv")] #[cfg(feature = "riscv")]
mod riscv; mod riscv;
// N.B.: the old x86-64 backend (`x86`) and the new one (`x64`) can both be // N.B.: the old x86-64 backend (`x86`) and the new one (`x64`) are both
// included; if the new backend is included, then it is the default backend // included whenever building with x86 support. The new backend is the default,
// returned for an x86-64 triple, but a specific option can request the old // but the old can be requested with `BackendVariant::Legacy`. However, if this
// backend. It is important to have the ability to instantiate *both* backends // crate is built with the `old-x86-backend` feature, then the old backend is
// in the same build so that we can do things like differential fuzzing between // default instead.
// backends, or perhaps offer a runtime configuration flag in the future.
#[cfg(feature = "x86")] #[cfg(feature = "x86")]
mod x86; mod x86;
#[cfg(feature = "x64")] #[cfg(feature = "x86")]
mod x64; mod x64;
#[cfg(feature = "arm32")] #[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 /// 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 /// backends, the "old" and "new" one; the new one is the default if included
/// in the build configuration and not otherwise specified. /// in the build configuration and not otherwise specified.
#[derive(Clone, Copy)] #[derive(Clone, Copy, Debug)]
pub enum BackendVariant { pub enum BackendVariant {
/// Any backend available. /// Any backend available.
Any, Any,
@@ -149,13 +148,13 @@ pub fn lookup_variant(triple: Triple, variant: BackendVariant) -> Result<Builder
isa_builder!(x86, (feature = "x86"), triple) isa_builder!(x86, (feature = "x86"), triple)
} }
(Architecture::X86_64, BackendVariant::MachInst) => { (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) => { (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) => { (Architecture::X86_64, BackendVariant::Any) => {
isa_builder!(x86, (feature = "x86"), triple) 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. /// Get the ISA-dependent flag values that were used to make this trait object.
fn isa_flags(&self) -> Vec<settings::Value>; 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); fn hash_all_flags(&self, hasher: &mut dyn Hasher);
/// Get the default calling convention of this target. /// Get the default calling convention of this target.

View File

@@ -8,9 +8,7 @@ use log::warn;
#[cfg(feature = "enable-serde")] #[cfg(feature = "enable-serde")]
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[cfg(feature = "x64")]
use crate::binemit::CodeOffset; use crate::binemit::CodeOffset;
#[cfg(feature = "x64")]
use crate::isa::unwind::UnwindInst; use crate::isa::unwind::UnwindInst;
/// Maximum (inclusive) size of a "small" stack allocation /// Maximum (inclusive) size of a "small" stack allocation
@@ -334,10 +332,8 @@ impl UnwindInfo {
} }
} }
#[cfg(feature = "x64")]
const UNWIND_RBP_REG: u8 = 5; const UNWIND_RBP_REG: u8 = 5;
#[cfg(feature = "x64")]
pub(crate) fn create_unwind_info_from_insts<MR: RegisterMapper<regalloc::Reg>>( pub(crate) fn create_unwind_info_from_insts<MR: RegisterMapper<regalloc::Reg>>(
insts: &[(CodeOffset, UnwindInst)], insts: &[(CodeOffset, UnwindInst)],
) -> CodegenResult<UnwindInfo> { ) -> CodegenResult<UnwindInfo> {

View File

@@ -109,6 +109,7 @@ mod tests {
use target_lexicon::triple; use target_lexicon::triple;
#[test] #[test]
#[cfg_attr(feature = "old-x86-backend", ignore)]
fn test_simple_func() { fn test_simple_func() {
let isa = lookup(triple!("x86_64")) let isa = lookup(triple!("x86_64"))
.expect("expect x86 ISA") .expect("expect x86 ISA")
@@ -151,6 +152,7 @@ mod tests {
} }
#[test] #[test]
#[cfg_attr(feature = "old-x86-backend", ignore)]
fn test_multi_return_func() { fn test_multi_return_func() {
let isa = lookup(triple!("x86_64")) let isa = lookup(triple!("x86_64"))
.expect("expect x86 ISA") .expect("expect x86 ISA")

View File

@@ -2,7 +2,9 @@
use crate::binemit; use crate::binemit;
use crate::ir; 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::machinst::*;
use crate::regalloc::RegisterSet; use crate::regalloc::RegisterSet;
use crate::settings::{self, Flags}; use crate::settings::{self, Flags};
@@ -62,6 +64,10 @@ impl TargetIsa for TargetIsaAdapter {
self.backend.isa_flags() self.backend.isa_flags()
} }
fn variant(&self) -> BackendVariant {
BackendVariant::MachInst
}
fn hash_all_flags(&self, hasher: &mut dyn Hasher) { fn hash_all_flags(&self, hasher: &mut dyn Hasher) {
self.backend.hash_all_flags(hasher); self.backend.hash_all_flags(hasher);
} }

View File

@@ -30,4 +30,3 @@ anyhow = "1.0.32"
[features] [features]
enable-peepmatic = [] enable-peepmatic = []
experimental_arm32 = [] experimental_arm32 = []
experimental_x64 = []

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %amode_add(i64, i64) -> i64 { function %amode_add(i64, i64) -> i64 {
block0(v0: i64, v1: i64): block0(v0: i64, v1: i64):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f0(b1, i32, i32) -> i32 { function %f0(b1, i32, i32) -> i32 {
; check: pushq %rbp ; check: pushq %rbp

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f(i32, i32) -> i32 { function %f(i32, i32) -> i32 {
block0(v0: i32, v1: i32): block0(v0: i32, v1: i32):

View File

@@ -1,6 +1,5 @@
test run test run
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %ctz(i64, i64) -> i8 { function %ctz(i64, i64) -> i8 {
block0(v0: i64, v1: i64): block0(v0: i64, v1: i64):

View File

@@ -1,6 +1,5 @@
test run test run
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %reverse_bits_zero() -> b1 { function %reverse_bits_zero() -> b1 {
block0: block0:

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f0(i32, i32) -> i32 { function %f0(i32, i32) -> i32 {
block0(v0: i32, v1: i32): block0(v0: i32, v1: i32):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 has_lzcnt target x86_64 machinst has_lzcnt
feature "experimental_x64"
function %clz(i64) -> i64 { function %clz(i64) -> i64 {
block0(v0: i64): block0(v0: i64):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f0(i64, i64) -> i64, i64 { function %f0(i64, i64) -> i64, i64 {
block0(v0: i64, v1: i64): block0(v0: i64, v1: i64):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 has_bmi1 target x86_64 machinst has_bmi1
feature "experimental_x64"
function %ctz(i64) -> i64 { function %ctz(i64) -> i64 {
block0(v0: i64): block0(v0: i64):

View File

@@ -1,7 +1,6 @@
test run test run
set avoid_div_traps=false set avoid_div_traps=false
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f0(i32, i32) -> i32 { function %f0(i32, i32) -> i32 {
block0(v0: i32, v1: i32): block0(v0: i32, v1: i32):

View File

@@ -1,7 +1,6 @@
test compile test compile
set avoid_div_traps=false set avoid_div_traps=false
target x86_64 target x86_64 machinst
feature "experimental_x64"
;; We should get the checked-div/rem sequence (`srem` pseudoinst below) even ;; 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 ;; when `avoid_div_traps` above is false (i.e. even when the host is normally

View File

@@ -1,8 +1,7 @@
test compile test compile
set enable_llvm_abi_extensions=true set enable_llvm_abi_extensions=true
set unwind_info=true set unwind_info=true
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f0(i64, i64, i64, i64) -> i64 windows_fastcall { function %f0(i64, i64, i64, i64) -> i64 windows_fastcall {
block0(v0: i64, v1: i64, v2: i64, v3: i64): block0(v0: i64, v1: i64, v2: i64, v3: i64):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f(f64) -> f64 { function %f(f64) -> f64 {
block0(v0: f64): block0(v0: f64):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f(i32, i64 vmctx) -> i64 { function %f(i32, i64 vmctx) -> i64 {
gv0 = vmctx gv0 = vmctx

View File

@@ -1,7 +1,6 @@
test compile test compile
set enable_llvm_abi_extensions=true set enable_llvm_abi_extensions=true
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f0(i128, i128) -> i128 { function %f0(i128, i128) -> i128 {
; check: pushq %rbp ; check: pushq %rbp

View File

@@ -1,6 +1,5 @@
test run test run
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %test_icmp_eq_i128() -> b1 { function %test_icmp_eq_i128() -> b1 {
block0: block0:

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %add_from_mem_u32_1(i64, i32) -> i32 { function %add_from_mem_u32_1(i64, i32) -> i32 {
block0(v0: i64, v1: i32): block0(v0: i64, v1: i32):

View File

@@ -1,7 +1,6 @@
test compile test compile
set enable_simd set enable_simd
target x86_64 skylake target x86_64 machinst skylake
feature "experimental_x64"
function %move_registers(i32x4) -> b8x16 { function %move_registers(i32x4) -> b8x16 {
block0(v0: i32x4): block0(v0: i32x4):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 has_popcnt has_sse42 target x86_64 machinst has_popcnt has_sse42
feature "experimental_x64"
function %popcnt(i64) -> i64 { function %popcnt(i64) -> i64 {
block0(v0: i64): block0(v0: i64):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %popcnt64(i64) -> i64 { function %popcnt64(i64) -> i64 {
block0(v0: i64): block0(v0: i64):

View File

@@ -1,7 +1,6 @@
test compile test compile
set enable_probestack=true set enable_probestack=true
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f1() -> i64 { function %f1() -> i64 {
ss0 = explicit_slot 100000 ss0 = explicit_slot 100000

View File

@@ -1,6 +1,5 @@
test run test run
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %test_compare_i32() -> b1 { function %test_compare_i32() -> b1 {
block0: block0:

View File

@@ -1,7 +1,6 @@
test compile test compile
set enable_llvm_abi_extensions=true set enable_llvm_abi_extensions=true
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f0(i32, i128, i128) -> i128 { function %f0(i32, i128, i128) -> i128 {
; check: pushq %rbp ; check: pushq %rbp

View File

@@ -1,6 +1,5 @@
test run test run
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %ishl(i64, i64, i8) -> i64, i64 { function %ishl(i64, i64, i8) -> i64, i64 {
block0(v0: i64, v1: i64, v2: i8): block0(v0: i64, v1: i64, v2: i8):

View File

@@ -1,7 +1,6 @@
test run test run
set enable_simd set enable_simd
target x86_64 skylake target x86_64 machinst skylake
feature "experimental_x64"
function %iadd_i32x4(i32x4, i32x4) -> i32x4 { function %iadd_i32x4(i32x4, i32x4) -> i32x4 {
block0(v0:i32x4, v1:i32x4): block0(v0:i32x4, v1:i32x4):

View File

@@ -1,7 +1,6 @@
test compile test compile
set enable_simd set enable_simd
target x86_64 skylake target x86_64 machinst skylake
feature "experimental_x64"
function %bitselect_i16x8() -> i16x8 { function %bitselect_i16x8() -> i16x8 {
block0: block0:

View File

@@ -1,7 +1,6 @@
test run test run
set enable_simd set enable_simd
target x86_64 skylake target x86_64 machinst skylake
feature "experimental_x64"
function %bitselect_i8x16(i8x16, i8x16, i8x16) -> i8x16 { function %bitselect_i8x16(i8x16, i8x16, i8x16) -> i8x16 {
block0(v0: i8x16, v1: i8x16, v2: i8x16): block0(v0: i8x16, v1: i8x16, v2: i8x16):

View File

@@ -1,7 +1,6 @@
test compile test compile
set enable_simd set enable_simd
target x86_64 skylake target x86_64 machinst skylake
feature "experimental_x64"
function %icmp_ne_32x4(i32x4, i32x4) -> b32x4 { function %icmp_ne_32x4(i32x4, i32x4) -> b32x4 {
block0(v0: i32x4, v1: i32x4): block0(v0: i32x4, v1: i32x4):

View File

@@ -1,7 +1,6 @@
test run test run
set enable_simd set enable_simd
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %icmp_eq_i8x16() -> b8 { function %icmp_eq_i8x16() -> b8 {
block0: block0:

View File

@@ -1,7 +1,6 @@
test run test run
set enable_simd set enable_simd
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %fcvt_from_sint() -> b1 { function %fcvt_from_sint() -> b1 {
block0: block0:

View File

@@ -1,7 +1,6 @@
test compile test compile
set enable_simd set enable_simd
target x86_64 has_ssse3 has_sse41 target x86_64 machinst has_ssse3 has_sse41
feature "experimental_x64"
;; shuffle ;; shuffle

View File

@@ -1,7 +1,6 @@
test run test run
set enable_simd set enable_simd
target x86_64 target x86_64 machinst
feature "experimental_x64"
;; shuffle ;; shuffle

View File

@@ -1,7 +1,6 @@
test compile test compile
set enable_simd set enable_simd
target x86_64 skylake target x86_64 machinst skylake
feature "experimental_x64"
function %bnot_b32x4(b32x4) -> b32x4 { function %bnot_b32x4(b32x4) -> b32x4 {
block0(v0: b32x4): block0(v0: b32x4):

View File

@@ -1,7 +1,6 @@
test run test run
set enable_simd set enable_simd
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %bnot() -> b32 { function %bnot() -> b32 {
block0: block0:

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function u0:0(i64 sarg(64)) -> i8 system_v { function u0:0(i64 sarg(64)) -> i8 system_v {
block0(v0: i64): block0(v0: i64):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %f0(i64 sret) { function %f0(i64 sret) {
block0(v0: i64): block0(v0: i64):

View File

@@ -1,7 +1,6 @@
test compile test compile
set tls_model=elf_gd set tls_model=elf_gd
target x86_64 target x86_64 machinst
feature "experimental_x64"
function u0:0(i32) -> i64 { function u0:0(i32) -> i64 {
gv0 = symbol colocated tls u1:0 gv0 = symbol colocated tls u1:0

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
function %elide_uextend_add(i32, i32) -> i64 { function %elide_uextend_add(i32, i32) -> i64 {
block0(v0: i32, v1: i32): block0(v0: i32, v1: i32):

View File

@@ -1,6 +1,5 @@
test compile test compile
target x86_64 target x86_64 machinst
feature "experimental_x64"
;; From: https://github.com/bytecodealliance/wasmtime/issues/2670 ;; From: https://github.com/bytecodealliance/wasmtime/issues/2670

View File

@@ -1,5 +1,5 @@
test regalloc test regalloc
target i686 target i686 legacy
; %rdi can't be used in a movsbl instruction, so test that the register ; %rdi can't be used in a movsbl instruction, so test that the register
; allocator can move it to a register that can be. ; allocator can move it to a register that can be.

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 haswell target x86_64 legacy haswell
function %foo(i64, i64, i64, i32) -> b1 system_v { function %foo(i64, i64, i64, i32) -> b1 system_v {
block3(v0: i64, v1: i64, v2: i64, v3: i32): block3(v0: i64, v1: i64, v2: i64, v3: i32):

View File

@@ -1,6 +1,6 @@
; Test the legalization of function signatures. ; Test the legalization of function signatures.
test legalizer test legalizer
target i686 target i686 legacy
; regex: V=v\d+ ; regex: V=v\d+

View File

@@ -1,6 +1,6 @@
; Test the legalization of function signatures. ; Test the legalization of function signatures.
test legalizer test legalizer
target x86_64 target x86_64 legacy
; regex: V=v\d+ ; regex: V=v\d+

View File

@@ -2,7 +2,7 @@
test binemit test binemit
set opt_level=speed_and_size set opt_level=speed_and_size
set emit_all_ones_funcaddrs set emit_all_ones_funcaddrs
target i686 haswell target i686 legacy haswell
; The binary encodings can be verified with the command: ; The binary encodings can be verified with the command:
; ;

View File

@@ -2,7 +2,7 @@
test binemit test binemit
set opt_level=speed_and_size set opt_level=speed_and_size
set emit_all_ones_funcaddrs set emit_all_ones_funcaddrs
target x86_64 haswell target x86_64 legacy haswell
; The binary encodings can be verified with the command: ; The binary encodings can be verified with the command:
; ;

View File

@@ -1,6 +1,6 @@
test compile test compile
set enable_probestack=false set enable_probestack=false
target i686 target i686 legacy
function u0:0(i32 vmctx) baldrdash_system_v { function u0:0(i32 vmctx) baldrdash_system_v {
sig0 = (i32 vmctx, i32 sigid) baldrdash_system_v sig0 = (i32 vmctx, i32 sigid) baldrdash_system_v

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 baseline target x86_64 legacy baseline
; clz/ctz on 64 bit operands ; clz/ctz on 64 bit operands

View File

@@ -1,6 +1,6 @@
test binemit test binemit
set opt_level=speed_and_size set opt_level=speed_and_size
target x86_64 baseline target x86_64 legacy baseline
; The binary encodings can be verified with the command: ; The binary encodings can be verified with the command:
; ;

View File

@@ -1,6 +1,6 @@
; Binary emission of 32-bit floating point code. ; Binary emission of 32-bit floating point code.
test binemit test binemit
target i686 haswell target i686 legacy haswell
; The binary encodings can be verified with the command: ; The binary encodings can be verified with the command:
; ;

View File

@@ -1,7 +1,7 @@
; binary emission of x86-32 code. ; binary emission of x86-32 code.
test binemit test binemit
set opt_level=speed_and_size set opt_level=speed_and_size
target i686 haswell target i686 legacy haswell
; The binary encodings can be verified with the command: ; The binary encodings can be verified with the command:
; ;

View File

@@ -1,7 +1,7 @@
; Binary emission of 64-bit floating point code. ; Binary emission of 64-bit floating point code.
test binemit test binemit
set opt_level=speed_and_size set opt_level=speed_and_size
target x86_64 haswell target x86_64 legacy haswell
; The binary encodings can be verified with the command: ; The binary encodings can be verified with the command:
; ;

View File

@@ -2,7 +2,7 @@
test binemit test binemit
set opt_level=speed_and_size set opt_level=speed_and_size
set is_pic set is_pic
target x86_64 haswell target x86_64 legacy haswell
; The binary encodings can be verified with the command: ; The binary encodings can be verified with the command:
; ;

View File

@@ -1,5 +1,5 @@
test run 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 ; 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 { function %test_b64() -> b64 {

View File

@@ -1,7 +1,7 @@
; binary emission of x86-64 code. ; binary emission of x86-64 code.
test binemit test binemit
set opt_level=speed_and_size set opt_level=speed_and_size
target x86_64 haswell target x86_64 legacy haswell
; The binary encodings can be verified with the command: ; The binary encodings can be verified with the command:
; ;

View File

@@ -1,5 +1,5 @@
test run test run
target x86_64 target x86_64 legacy
function %reverse_bits_zero() -> b1 { function %reverse_bits_zero() -> b1 {
block0: block0:

View File

@@ -1,7 +1,7 @@
test binemit test binemit
test run test run
target x86_64 target x86_64 legacy
function u0:323() -> b1 { function u0:323() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test run test run
target x86_64 target x86_64 legacy
function %br_false() -> b1 { function %br_false() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0(i128) -> i8 fast { function u0:0(i128) -> i8 fast {
block0(v0: i128): block0(v0: i128):

View File

@@ -1,5 +1,5 @@
test run test run
target x86_64 target x86_64 legacy
function u0:0() -> b1 { function u0:0() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0() -> b1 { function u0:0() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test compile test compile
target i686 target i686 legacy
function u0:0(i32, i32) -> i32 { function u0:0(i32, i32) -> i32 {
block0(v0: i32, v1: i32): block0(v0: i32, v1: i32):

View File

@@ -1,5 +1,5 @@
test run test run
target x86_64 target x86_64 legacy
function u0:0() -> b1 { function u0:0() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0() -> b1 { function u0:0() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test run test run
target i686 target i686 legacy
function u0:0() -> b1 { function u0:0() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test compile test compile
target i686 target i686 legacy
function u0:0() -> b1 { function u0:0() -> b1 {
block0: block0:

View File

@@ -1,6 +1,6 @@
; Check that floating-point and integer constants equal to zero are optimized correctly. ; Check that floating-point and integer constants equal to zero are optimized correctly.
test binemit test binemit
target i686 target i686 legacy
function %foo() -> f32 fast { function %foo() -> f32 fast {
block0: block0:

View File

@@ -1,6 +1,6 @@
; Check that floating-point constants equal to zero are optimized correctly. ; Check that floating-point constants equal to zero are optimized correctly.
test binemit test binemit
target x86_64 target x86_64 legacy
function %zero_const_32bit_no_rex() -> f32 fast { function %zero_const_32bit_no_rex() -> f32 fast {
block0: block0:

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0() -> i128 system_v { function u0:0() -> i128 system_v {
block0: block0:

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0(i64, i64) -> i128 fast { function u0:0(i64, i64) -> i128 fast {
block0(v0: i64, v1: i64): block0(v0: i64, v1: i64):

View File

@@ -1,5 +1,5 @@
test run test run
target x86_64 haswell target x86_64 legacy haswell
function %test_icmp_eq_i128() -> b1 { function %test_icmp_eq_i128() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test run test run
target x86_64 haswell target x86_64 legacy haswell
function %test_imul_i128() -> b1 { function %test_imul_i128() -> b1 {
block0: block0:

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0(i16) -> i8 fast { function u0:0(i16) -> i8 fast {
block0(v0: i16): block0(v0: i16):

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0(i64, i64) -> i128 system_v { function u0:0(i64, i64) -> i128 system_v {
block0(v0: i64, v1: i64): block0(v0: i64, v1: i64):

View File

@@ -1,6 +1,6 @@
test compile test compile
set opt_level=speed_and_size set opt_level=speed_and_size
target x86_64 target x86_64 legacy
function u0:0(i8) -> i8 fast { function u0:0(i8) -> i8 fast {
block0(v0: i8): block0(v0: i8):

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0(i128) system_v { function u0:0(i128) system_v {
block0(v0: i128): block0(v0: i128):

View File

@@ -1,6 +1,6 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0() -> i8 fast { function u0:0() -> i8 fast {
block0: block0:

View File

@@ -1,6 +1,6 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:51(i64, i64) system_v { function u0:51(i64, i64) system_v {
ss0 = explicit_slot 0 ss0 = explicit_slot 0

View File

@@ -1,6 +1,6 @@
test legalizer test legalizer
target x86_64 target x86_64 legacy
function %br_icmp(i64) fast { function %br_icmp(i64) fast {
block0(v0: i64): block0(v0: i64):

View File

@@ -1,6 +1,6 @@
test compile test compile
set opt_level=speed_and_size set opt_level=speed_and_size
target x86_64 target x86_64 legacy
; regex: V=v\d+ ; regex: V=v\d+
; regex: BB=block\d+ ; regex: BB=block\d+

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
; regex: V=v\d+ ; regex: V=v\d+

View File

@@ -1,7 +1,7 @@
; Test legalization of a non-colocated call in 64-bit non-PIC mode. ; Test legalization of a non-colocated call in 64-bit non-PIC mode.
test legalizer test legalizer
set opt_level=speed_and_size set opt_level=speed_and_size
target x86_64 haswell target x86_64 legacy haswell
function %call() { function %call() {
fn0 = %foo() fn0 = %foo()

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
; regex: V=v\d+ ; regex: V=v\d+

View File

@@ -1,7 +1,7 @@
; Test the custom legalizations. ; Test the custom legalizations.
test legalizer test legalizer
target i686 target i686 legacy
target x86_64 target x86_64 legacy
; regex: V=v\d+ ; regex: V=v\d+
; regex: BB=block\d+ ; regex: BB=block\d+

View File

@@ -2,7 +2,7 @@
test legalizer test legalizer
; See also legalize-div.clif. ; See also legalize-div.clif.
set avoid_div_traps=1 set avoid_div_traps=1
target x86_64 target x86_64 legacy
; regex: V=v\d+ ; regex: V=v\d+
; regex: BB=block\d+ ; regex: BB=block\d+

View File

@@ -2,7 +2,7 @@
test legalizer test legalizer
; See also legalize-div-traps.clif. ; See also legalize-div-traps.clif.
set avoid_div_traps=0 set avoid_div_traps=0
target x86_64 target x86_64 legacy
; regex: V=v\d+ ; regex: V=v\d+
; regex: BB=block\d+ ; regex: BB=block\d+

View File

@@ -1,6 +1,6 @@
; Test the legalization of f64const. ; Test the legalization of f64const.
test legalizer test legalizer
target x86_64 target x86_64 legacy
; regex: V=v\d+ ; regex: V=v\d+

View File

@@ -1,5 +1,5 @@
test compile test compile
target x86_64 target x86_64 legacy
function u0:0(i16) -> f64 fast { function u0:0(i16) -> f64 fast {
block0(v0: i16): block0(v0: i16):

View File

@@ -1,6 +1,6 @@
test legalizer test legalizer
set enable_heap_access_spectre_mitigation=false set enable_heap_access_spectre_mitigation=false
target x86_64 target x86_64 legacy
; Test legalization for various forms of heap addresses. ; Test legalization for various forms of heap addresses.
; regex: BB=block\d+ ; regex: BB=block\d+

View File

@@ -1,6 +1,6 @@
; Test the legalization of i128 instructions on x86_64. ; Test the legalization of i128 instructions on x86_64.
test legalizer test legalizer
target x86_64 haswell target x86_64 legacy haswell
; regex: V=v\d+ ; regex: V=v\d+

Some files were not shown because too many files have changed in this diff Show More